我试图从一个文本文件中读取并写入另一个文本文件。 Im读取的文件有2023行,而我写的文件只有2008行。我无法弄清楚另一条线上发生了什么......我在某处失去了它们。我做错了什么?
谢谢!
继承我在C#中的代码。
static void Main(string[] args)
{
StreamWriter writer = new StreamWriter("C:/Users/Rafael/desktop/newfile.txt");
StreamReader reader = new StreamReader("C:/Users/Rafael/desktop/new1.txt");//, System.Text.Encoding.GetEncoding("ISO-8859-1"));
string line;
while ((line = reader.ReadLine()) != null)
{
writer.WriteLine(line);
}
}
答案 0 :(得分:9)
这里没有关闭编写器 - 因此可能无法写入文件。你可以通过在循环后调用Close()来测试它,或者如果你还没有完成文件,你可以使用Flush()。
如果有选择,我会重写代码以使用Using{}
块,当它们超出范围时,通过调用Dispose()自动关闭流。
答案 1 :(得分:5)
最有可能的是输出没有被刷新,因为你没有在编写器上调用Dispose()
,所以缓冲的输出被丢弃了。
当您使用以这种方式实现IDisposable
的类时,应始终将它们包装在using
块中:
static void Main(string[] args)
{
using (StreamWriter writer = new StreamWriter("C:/Users/Rafael/desktop/newfile.txt"))
using (StreamReader reader = new StreamReader("C:/Users/Rafael/desktop/new1.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
writer.WriteLine(line);
}
}
}
答案 2 :(得分:3)
这是实施细节很重要的地方。基本上,当您写入StreamWriter
时,您编写的文本不一定会提交到磁盘上的文件。相反,它可能位于某个缓冲区中,并且必须刷新缓冲区才能将其提交到磁盘。 {(1}}本身会定期刷新此缓冲区。但是如果你让你的进程终止而不进行最后的刷新,缓冲区仍然可以保存未提交的写入。
所以,请致电StreamWriter
,writer.Flush
,writer.Close
,或者最重要的是,在writer.Dispose
块中使用StreamWriter
,以便它为你而处置。
答案 3 :(得分:2)
另外,如果您不想关闭该文件。您可以使用flush。
答案 4 :(得分:1)
ReadLine()
返回一个空字符串...
致电Flush()
和Close()
...考虑使用using
...
为什么不直接复制整个文件(File.Copy
)?
答案 5 :(得分:0)
循环后在编写器上调用Flush()