我正在编写一个连接到 FTP 的方法,将 csv 文件读取到流中,然后使用 TextFieldParser 来处理数据。
一切正常,除了我在读取 CSV 到一半时遇到的一个问题,突然我得到一个 ObjectDisposedException 异常。我尝试将 StreamReader 和 TextReader 都传递给 TextFieldParser 但都导致了同样的问题。
我应该将 CSV 下载到临时本地目录然后读取它还是从 FTP 读取文件没有问题?我想可能有一些服务器设置可能会在读取整个文件之前使流超时。
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("REMOVED.csv");
request.Credentials = new NetworkCredential("xyz", "*******");
using (WebResponse response = request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
using (TextReader reader = new StreamReader(stream))
{
using (TextFieldParser parser = new TextFieldParser(reader))
{
parser.HasFieldsEnclosedInQuotes = true;
parser.Delimiters = new string[] { "," };
while (!parser.EndOfData) //exception is thrown here about 1500lines into csv
{
Console.WriteLine(parser.ReadLine().ToString());
}
}
}
}
}
抛出异常前的最后一行输出
190500,快递,货运,经销商,1,5,15/12/2014 16:44
如果我应该先下载文件,我只使用 WebClient.DownloadFile() 吗?我怎样才能知道文件何时完成下载然后阅读它?
编辑:
系统网络跟踪输出显示如下
System.Net.Sockets 详细:0:[10412] 退出 Socket#24914721::Receive() -> Int32#95 System.Net 信息:0:[10412] FtpControlStream#15315213 - 收到响应 [226-文件成功传输 226 5.748秒(在此处测量),每秒 30.91 KB] System.Net 信息:0:[10412] FtpWebRequest#16868352::(释放 FTP 连接#15315213。)
进一步编辑
System.Net Tracing 的输出显示了正在接收的 CSV 的最后一行,那么为什么解析器在完成之前就被处置了?我对编程还是很陌生,所以我不确定如何进行