【问题标题】:empty notepad file instead of the one written on in c#空记事本文件,而不是用 C# 编写的文件
【发布时间】:2013-06-23 08:03:10
【问题描述】:

当我调用这个函数时,它只会打开几个空的记事本窗口,但是如果我在运行后打开 text2 文件,它会显示所有输入的行...我什至尝试刷新以写入缓冲区中的所有内容,但是没有帮助。

static void finish()
{
    FileStream fs2 = new FileStream("C:\\Users\\ayush.mishra\\Desktop\\text2.txt", FileMode.Create, FileAccess.Write);
    using(StreamWriter s = new StreamWriter(fs2))
    {
        s.WriteLine("This Notepad will self destruct in....");
        fs2.Flush();
        Process notepadProcess2 = Process.Start("C:\\Users\\ayush.mishra\\Desktop\\text2.txt");
        for (var i = 0; i < 40000000.00; i++);
        notepadProcess2.CloseMainWindow();
        s.WriteLine(" ******  5  ****** ");
        fs2.Flush();
        notepadProcess2 = Process.Start("C:\\Users\\ayush.mishra\\Desktop\\text2.txt");
        for (var i = 0; i < 400000000; i++);
        notepadProcess2.CloseMainWindow();
        s.WriteLine(" ******  4  ****** ");
        fs2.Flush();
        notepadProcess2 = Process.Start("C:\\Users\\ayush.mishra\\Desktop\\text2.txt");
        for (var i = 0; i < 400000000; i++);
        notepadProcess2.CloseMainWindow();
        s.WriteLine(" ******  3  ****** ");
        fs2.Flush();
        notepadProcess2 = Process.Start("C:\\Users\\ayush.mishra\\Desktop\\text2.txt");
        for (var i = 0; i < 400000000; i++);
        notepadProcess2.CloseMainWindow();
        notepadProcess2 = Process.Start("C:\\Users\\ayush.mishra\\Desktop\\text2.txt");
        s.WriteLine(" ******  2  ****** ");
        fs2.Flush();
        for (var i = 0; i < 400000000; i++);
        notepadProcess2.CloseMainWindow();
        notepadProcess2 = Process.Start("C:\\Users\\ayush.mishra\\Desktop\\text2.txt");
        s.WriteLine(" ******  1  ****** ");
        fs2.Flush();
        for (var i = 0; i < 400000000; i++);
        notepadProcess2.CloseMainWindow();
    }
}

有什么建议吗?

【问题讨论】:

  • 文件被锁定,在这种情况下记事本可能只显示空文件而不是错误消息。
  • 您可能希望使用Thread.Sleep()Timer 来进行计时,而不是遍历循环。即使将一个 int 递增 4 亿次需要 1 秒,但在 10 年后,在 CPU 速度更快的现代 PC 上它会瞬间结束。出于类似的原因,一些最古老的视频游戏在现代 PC 上变得无法播放。
  • 关闭 FileStream 而不是刷新它。或者尝试使用FileSharing option 调用构造函数,但由于您正在创建新文件,因此可能没有帮助。
  • @ShadowWizard 我让我通过一个线程同时打开了另一个文本文件,该线程显示锁定没有任何问题的数据..
  • @Artemix 关闭文件会有什么帮助。因为我避免尝试这样做,因为它看起来太麻烦了...

标签: c# file-io streamwriter notepad


【解决方案1】:

这里的问题是您首先在记事本中打开文件,然后将数据写入其中。由于文件已在记事本中打开,因此不会显示更改。但是,如果您再次在记事本中打开文件,它将显示写入其中的数据。

【讨论】:

  • 已经打开的文件应该在它之前显示书面部分。这就是为什么我每次都关闭它但每次它仍然显示为空...
  • 所以当你调用 notepadProcess2.CloseMainWindow() 时记事本会关闭?
  • 是的。它终止进程..从而关闭记事本文件..您可以在主类中运行此方法以检查输出..
  • using 语句结束时正在将数据写入文件。这就是为什么您只是看到记事本文件一次又一次地打开而没有任何文本。
  • 那是因为文件是在记事本中打开的,或者记事本会显示一个保存对话框。为什么不使用 File.WriteAllLines(string []) 方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2011-11-10
  • 2015-06-20
  • 2019-08-23
  • 1970-01-01
相关资源
最近更新 更多