在.net读取大文件时,它只读取1000行

时间:2018-04-16 14:40:56

标签: c# asp.net

我有一个包含产品和价格的文件,我需要写入数据库,但是我正在尝试读取一个文件并且它只读取1000行,并且它说它是文件结尾,尽管文件有超过120000行。看起来读者正在从文档的开头读取一些行,然后从中间读取一些行,然后从文件的末尾读取一些行。即使我不将它们写入数据库并只将它们写入数据库,我也得到了相同的结果。 这是我的代码:

public async Task LoadProductsFromExcel()
    {
        var file = @"F:\Links\productsToImport.csv";
       var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
        using (var streamReader = new StreamReader(fileStream))
        {   
            while (!streamReader.EndOfStream)
            {
                var line = streamReader.ReadLine();
                var data = line.Split(new[] { ';' });
                var product = new Product() { Name = data[1], Code = data[0]};       
                context.Products.Add(product);
                Console.WriteLine(data[0]+"   "+ data[1]);

            }

        }
        await unitOfWork.CompleteAsync();
    }

流缓冲区或其他问题是否存在问题?或者我正在读错文件。

1 个答案:

答案 0 :(得分:1)

我可以看到一些可能性。

首先,.csv文件可能没有Newline字符分隔所有记录,或者它可能有奇怪的字符搞砸了ReadLine()循环。使用Notepad ++打开文件(并确保显示所有符号)或将其放入十六进制编辑器。

其次,你的代码中有一个可能产生异常的错误 - 可能是这段代码实际上已经进入1000行并且由于在try / catch块中默默捕获的异常而退出更高:

            var line = streamReader.ReadLine();
            var data = line.Split(new[] { ';' });
            var product = new Product() { Name = data[1], Code = data[0]};       
            context.Products.Add(product);
            Console.WriteLine(data[0]+"   "+ data[1]);

...如果line = gets读取不包含分号的行,则它将使data = 1元素数组。然后使用Name = data [1]的下一行将生成“过去结束数组”异常。所以另一种可能性是你的源文件有一行没有分号,你有一个抓住它的try / catch块。