2012-06-18 368 views
10

我試圖創建一個web服務,它獲得一個URL,例如www.domain.co.uk/prices.csv然後讀取csv文件。這是可能的和如何?理想情況下,沒有下載csv文件?如何從url中讀取csv文件?

+0

沒有下載CSV文件?你期望如何閱讀它?或者,你的意思是閱讀它的一部分,而不必首先下載整件事情。 –

+0

你想做那個客戶端或服務器端嗎? – miniBill

+1

下載並不意味着你必須將文件保存到磁盤,如果這是你的想法。這就是說,你不能在沒有下載文件的情況下閱讀文件。 – Botz3000

回答

19

你可以使用:

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解析器在那裏,我會建議反對你自己。 FileHelpers是一個很好的。

+1

如果你正在將整個文件讀入字符串,並且不需要'WebRequest'的額外靈活性,那麼你可以使用' WebClient.DownloadString'。 – Joey

4

必須下載該文件才能閱讀。這不像你的代碼可以以某種方式遠程地獲取內容而不用提取它們。

但是,如果你的意思是不需要將它保存到文件中。您可以使用WebClient類作爲便利通過HTTP獲取資源。特別是你可能想看看DownloadString method

2
// Download the file to a specified path. Using the WebClient class we can download 
// files directly from a provided url, like in this case. 

System.Net.WebClient client = new WebClient(); 
client.DownloadFile(url, csvPath); 

其中url是您的網站與csv文件和csvPath是你想要的實際文件去。

1

在您的Web服務中,您可以使用WebClient類來下載文件,像這樣(我沒有進行任何異常處理,沒有使用或關閉/處置調用,只是想給出您可以使用的想法和細化/提高...)

using System.Net; 

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

,那麼你可以做任何你喜歡它,一旦文件內容在服務的執行流程是可用的。

如果您必須將其作爲Web服務調用的返回值返回給客戶端,則可以返回DataSet或任何其他您喜歡的數據結構。

+0

hmmmm所以如果我想把csv放到一個數據表中,我會做datatable table = webClient – Beginner

0

WebRequest的文檔有一個使用流的示例。使用流允許您解析文檔,而無需將其存儲的所有內存

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,您還可以直接從流中讀取。