gpt4 book ai didi

c# - 如何在 .NET 中远程逐行读取文件?

转载 作者:行者123 更新时间:2023-11-30 15:15:14 25 4
gpt4 key购买 nike

假设我有一个位于给定 url 上的文件(并且不可能在托管该文件的服务器上执行任何操作)。

.NET 客户端应用程序是否可以在不完全下载文件的情况下逐行读取它?如果是,怎么办?

最佳答案

最终,您需要将整个文件下载到您的本地机器上。没有办法解决这个问题。但是你不必等到整个文件都读完才开始处理数据:

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
}
}

但我还会寻找可以接受 Stream 作为构造函数输入的专用 CSV 解析器。如果您打算只使用 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(','));

(并不是说我支持用逗号分隔...这只是一个简单的例子)。

关于c# - 如何在 .NET 中远程逐行读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52899002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com