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

标签 c# .net file io remote-access

假设我有一个位于给定 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/

相关文章:

c# - UserPrincipal.FindByIdentity 抛出PrincipalServerDownException

.net - 在 .Net 中使用抗锯齿调整图像大小

java - 在java中创建文件

c# - 如何在C#程序中使用用Visual C++编写的DLL?

c# - 将 a-law 转换为 pcm

.net - 沉迷于 LINQ

.net - 使用 C# 在智能卡上导入 RSA key 对

file - 使用 BufReader 逐行读取文件,存储到数组中

python - 通过Django应用程序中的音频标签播放音频

c# - 在 Entity Framework Migration 中填写表格