Я пытаюсь создать веб-службу, которая попадает к URL-адресу, например. www.domain.co.uk/prices.csv
, а затем читает файл csv. Это возможно и как? В идеале без загрузки файла csv?
Как читать csv файл с URL-адреса?
Ответ 1
Вы можете использовать:
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 является хорошим.
Ответ 2
Вам необходимо загрузить файл, чтобы прочитать его. Это не похоже на то, что ваш код может каким-то образом очищать содержимое удаленно, не загружая их.
Но вам не нужно сохранять его в файл, если вы имеете в виду это. Вы можете использовать класс WebClient
в качестве удобства для извлечения ресурсов через HTTP. В частности, вы можете посмотреть метод DownloadString
.
Ответ 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 - это то место, куда вы хотите, чтобы фактический файл находился.
Ответ 4
В вашей веб-службе вы можете использовать класс WebClient для загрузки файла, что-то вроде этого (я не обрабатывал обработку исключений, а не любые вызовы с использованием или Close/Dispose, просто хотел дать идею, которую вы можете использовать и уточнять/улучшить...)
using System.Net;
WebClient webClient = new WebClient();
webClient.DownloadFile("http://www.domain.co.uk/prices.csv");
то вы можете делать все, что вам нравится, после того, как содержимое файла будет доступно в потоке выполнения вашей службы.
если вы должны вернуть его клиенту в качестве возвращаемого значения вызова веб-службы, вы можете либо вернуть DataSet
, либо любую другую структуру данных, которую вы предпочитаете.
Ответ 5
Sebastien Lorion CSV Reader имеет конструктор, который принимает поток.
Если вы решили использовать это, ваш пример станет следующим:
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 также позволяет вам читать непосредственно из потока.
Ответ 6
В документации для WebRequest приведен пример использования потоков. Использование потока позволяет анализировать документ без сохранения его в памяти