gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:00 26 4
gpt4 key购买 nike

我正在尝试读取文本文件以检查所有行是否具有相同的列数。在本地代码中它工作正常但在网络共享文件夹上(具有每个人的权限)它仅适用于小文件(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/

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