逃脱的StreamWriter一些线路

我想读一个大的文本文件(14MB),每行成字符串列表,然后得到不同串出来,然后将它写回另一个文本文件,我用下面的代码:

static void removeDuplicates(string filename) { //Reading from the file Console.WriteLine("Reading from the file...."); StreamReader sr = new StreamReader(filename); List<string> namesList = new List<string>(); while (!sr.EndOfStream) { namesList.Add(sr.ReadLine()); } //Getting the distinct list namesList=namesList.Distinct().ToList<string>(); Console.WriteLine("Writing to the new file"); //writing back to the file StreamWriter sw = new StreamWriter(filename + "_NoDuplicates",false); for (int i = 0; i < namesList.Count; i++) { sw.Write(namesList[i] + "\r\n"); } }

问题是StreamWriter的总是停一定数量的行后写,总是停在同一个地方写

我确信,列表内容是正确的,并且该环路经过列表中的所有项目,这只是StreamWriter的问题。

该列表包含前鲜明()1048577的物品,和鲜明后880829();

该StreamWriter的在串号880805的中间停止写作,不写后的东西,它甚至停在一个词的中间!

这是为什么发生的事情,我究竟做错了什么?

--------------解决方案-------------

如果你没有得到一个错误,那么我的猜测是,该文件的最后一位仍在缓冲。 尝试添加到呼叫sw.Flush()到你的方法结束。

而且,当然,你需要关闭流,这无论如何都应该刷新缓冲区。

说明

StreamWriter内部使用的缓冲区。 每次调用Write()将数据实际写入到内存缓冲区。 当缓冲区填满它被刷新到磁盘。

你看到的问题是,因为你写的没有填满缓冲文件的最后几行,所以没有触发刷新缓冲区写入磁盘。 它总是出现在该文件中的相同点,因为这是缓冲区的大小的倍数,最后整数。 通过关闭流你造成任何剩余的数据被刷新到磁盘。

分类:C# 时间:2015-03-15 人气:0
本文关键词: .NET,流
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.397 (s). 10 q(s)