В конечном счете, вам нужно выгрузить весь файл на локальный компьютер.Там нет никакого способа обойти это.Но вам не нужно ждать, чтобы прочитать весь файл до конца, прежде чем начинать обрабатывать данные в начале:
using (var request = WebRequest.Create("www.example.com/data.csv"))
using (var response = request.GetResponse())
using (var str = response.GetResponseStream())
using (var rdr = new StreamReader(str))
{
string line;
while ( (line = rdr.ReadLine()) != null)
{
//process each line here
}
}
Но я бы также искал специализированный парсер CSV, который может принимать Stream
как вход конструктора.Если вы планируете просто использовать string.Split()
или RegEx для просмотра данных, они оба намного медленнее и имеют много ошибок.
Я действительно испытываю желание встроить это в такой метод:
public IEnumerable<string> DownloadLines(string URL)
{
using (var request = WebRequest.Create(URL))
using (var response = request.GetResponse())
using (var str = response.GetResponseStream())
using (var rdr = new StreamReader(str))
{
string line;
while ( (line = rdr.ReadLine()) != null)
{
// make sure we yield a *different* variable (defined in the loop) each time
var result = line;
yield return result;
}
}
}
И тогда вы можете назвать это так:
foreach(var line in DownloadLines("www.example.com/data.csv"))
{
//process each line here
}
И это также будет работать с операторами linq:
var result = DownloadLines("www.example.com/data.csv").
Where(l => l.Length > 0).
Select(l => l.Split(','));
(Не то чтобы я одобряюразделение на запятую ... это только быстрый пример).