c# - 无法读取网络共享文件夹的大文件

标签 c# asp.net text-files

我正在尝试读取文本文件以检查所有行是否具有相同的列数。在本地代码中它工作正常但在网络共享文件夹上(具有每个人的权限)它仅适用于小文件(5mb)并且当我选择 10 MB 或 500 MB 文件时相同的代码不起作用(不工作意味着,这需要一些时间,但几分钟后页面就会刷新,就是这样)。它没有给出任何错误或显示任何消息。下面是读取文件并获取列数的代码

LinesLst = File.ReadLines(_fileName, Encoding.UTF8)
    .Select((line, index) =>
        {
            var count = line.Split(Delimiter).Length;
            if (NumberOfColumns < 0)
                NumberOfColumns = count;

            return new
            {
                line = line,
                count = count,
                index = index
            };
        })
    .Where(colCount => colCount.count != NumberOfColumns)
    .Select(colCount => colCount.line).ToList();    

最佳答案

也许您在大文件上遇到了 OutOfMemoryException。事实上,每次迭代都会在代码中创建许多对象:line.Split 的字符串数组和一个匿名对象。同时,实际上不需要匿名对象。我会这样重写代码:

LinesLst = File.ReadLines(_fileName, Encoding.UTF8)
    .Where(line =>
    {
        var count = line.Split(Delimiter).Length;
        if (NumberOfColumns < 0)
            NumberOfColumns = count;

        return count != NumberOfColumns;
    })
    .ToList();

此外,您可以尝试在调用line.Split 时摆脱字符串数组的创建。尝试替换字符串

var count = line.Split(Delimiter).Length;

到字符串

// Assume that Delimiter is char[]
var count = line.Count(c => Delimiter.Contains(c)) + 1;

// Assume that Delimiter is char
var count = line.Count(c => Delimiter == c) + 1;

关于c# - 无法读取网络共享文件夹的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694070/

相关文章:

c# - 除整数类型 - 结果是否可预测?

javascript - 如何获取客户端 IP 地址

c# - 从文本文件中读取两行数据

c - 在 C 中将字符串写入文本文件会留下一些字符

c# - NAudio 峰值音量计

c# - 'protected' 和 'protected internal' 有什么区别?

c# - 系统.BadImageFormatException : Could not load file or assembly 'x_Accessor,...' This assembly is built by a runtime newer

c# - Regular Expressions-VAlidation String-REAL菜鸟问题:)

c# - 找不到 CSC 中的源文件

python - 如何仅将一个文件的内容差异复制到另一个文件?