我正在尝试创建一个可以访问网址的网络服务,例如www.domain.co.uk/prices.csv
然后读取csv文件。这可能吗?怎么样?理想情况下不下载csv文件?
答案 0 :(得分:24)
您可以使用:
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 :(得分:4)
您必须下载文件才能阅读。这并不是说你的代码可以以某种方式在没有获取它们的情况下以某种方式远程分割内容。
但如果你的意思是,你不需要将它保存到文件中。您可以使用WebClient
类来方便通过HTTP获取资源。特别是,您可能需要查看DownloadString
method。
答案 2 :(得分: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);
网址是您的网站,其中包含csv文件,而csvPath是您希望实际文件的位置。
答案 3 :(得分:1)
在您的Web服务中,您可以使用WebClient类下载文件,类似于此(我没有进行任何异常处理,没有任何使用或关闭/处理调用,只是想提供您可以使用和改进的想法/改进......)
using System.Net;
WebClient webClient = new WebClient();
webClient.DownloadFile("http://www.domain.co.uk/prices.csv");
然后,一旦文件内容在您的服务执行流程中可用,您就可以随意执行任何操作。
如果您必须将其作为Web服务调用的返回值返回给客户端,则可以返回DataSet
或您喜欢的任何其他数据结构。
答案 4 :(得分: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还允许您直接从流中读取。
答案 5 :(得分:0)
WebRequest的文档中有一个使用流的示例。使用流可以解析文档而不将其全部存储在内存中