22

我试图创建一个 Web 服务,它可以访问一个 URL,例如www.domain.co.uk/prices.csv然后读取 csv 文件。这可能吗?如何?理想情况下不下载 csv 文件?

4

5 回答 5

34

你可以使用:

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是一个很好的工具。

于 2012-06-18T11:52:10.303 回答
3
// 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 是您希望实际文件所在的位置。

于 2012-06-18T11:44:45.180 回答
2

在您的 Web 服务中,您可以使用 WebClient 类来下载文件,如下所示(我没有进行任何异常处理,没有任何 using 或 Close/Dispose 调用,只是想给出您可以使用和改进/改进的想法。 ..)

using System.Net;

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

然后,一旦文件内容在您的服务的执行流程中可用,您就可以用它做任何您喜欢的事情。

如果您必须将其作为 Web 服务调用的返回值返回给客户端,您可以返回一个DataSet或任何其他您喜欢的数据结构。

于 2012-06-18T11:45:43.243 回答
1

Sebastien Lorion 的 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
        }
    }

}

曾经流行的FileHelpers还允许您直接从流中读取。

于 2012-06-18T12:03:30.340 回答
0

WebRequest的文档有一个使用流的示例。使用流允许您解析文档而不将其全部存储在内存中

于 2012-06-18T11:48:17.610 回答