2012-06-18 22 views
10

URLにアクセスするWebサービスを作成しようとしています。 www.domain.co.uk/prices.csvと入力して、csvファイルを読み取ります。これは可能ですか?理想的にはcsvファイルをダウンロードせずに?URLからcsvファイルを読み込むには?

+0

CSVファイルをダウンロードしないでください。どのようにそれを読むことを期待していますか?あるいは、最初に全部をダウンロードすることなく、その一部を読むことを意味します。 –

+0

クライアント側またはサーバー側を行いますか? – miniBill

+1

ダウンロードしても、ファイルがディスクに保存されているとは限りません。つまり、ダウンロードせずにファイルを読むことはできません。 – Botz3000

答えて

19

メモリにすべてを保存せずに文書を解析することができますそこに私は自分自身を圧延することに対して助言するだろう。 FileHelpersはいいです。

+1

ファイル全体を文字列に読み込み、 'WebRequest'の柔軟性を必要としない場合は、 WebClient.DownloadString'。 – Joey

4

にはがあります。ファイルをダウンロードしてください。それはあなたのコードが何らかの形でそれらをフェッチせずに内容を遠隔で記述できるようなものではありません。

しかし、それを意味する場合はファイルに保存する必要はありません。 WebClientクラスを使用して、HTTP経由でリソースを取得することができます。特にDownloadString methodを見てください。

2

ここで、urlはcsvファイルのあるサイトで、csvPathは実際のファイルを保存する場所です。

1

Webサービスでは、WebClientクラスを使用して、このようなファイルをダウンロードすることができます(例外ハンドリングは使用していません。クローズ/ディスポーザルコールは使用しません。 refine/improve ...)

using System.Net; 

WebClient webClient = new WebClient(); 
webClient.DownloadFile("http://www.domain.co.uk/prices.csv"); 

サービスの実行フローでファイルコンテンツが利用可能になると、あなたは好きなことをすることができます。

ウェブサービスコールの戻り値としてクライアントに返す必要がある場合は、DataSetまたは他の任意のデータ構造を返すことができます。

+0

hmmmm csvをデータテーブルに入れたいのであれば、datatable table = webClientを実行するのですか? – Beginner

0

WebRequestのドキュメントには、ストリームを使用する例があります。

public string GetCSV(string url) 
{ 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

    StreamReader sr = new StreamReader(resp.GetResponseStream()); 
    string results = sr.ReadToEnd(); 
    sr.Close(); 

    return results; 
} 
をし、それを分割する:

public static void SplitCSV() 
{ 
    List<string> splitted = new List<string>(); 
    string fileList = getCSV("http://www.google.com"); 
    string[] tempStr; 

    tempStr = fileList.Split(','); 

    foreach (string item in tempStr) 
    { 
     if (!string.IsNullOrWhiteSpace(item)) 
     { 
      splitted.Add(item); 
     } 
    } 
} 

CSVパーサの多くがありますが、ストリームを使用すると、あなたはあなたが使用することができ

1

Sebastien Lorion's CSV Readerには、Streamをとるコンストラクタがあります。

あなたがこれを使用することを決定した場合、あなたの例になるでしょう:

void GetCSVFromRemoteUrl(string url) 
{ 
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest 
    HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

    using (CsvReader csvReader = new CsvReader(response.GetResponseStream(), true)) 
    { 
     int fieldCount = csvReader.FieldCount; 
     string[] headers = csvReader.GetFieldHeaders(); 

     while (csvReader.ReadNextRecord()) 
     { 
      //Do work with CSV file data here 
     } 
    } 

} 

ever popular FileHelpersまた、あなたは、ストリームから直接読み取ることができます。

関連する問題