在我的C#代码中,计算机是否会等到输出完成后再继续?

时间:2013-10-31 15:12:30

标签: c# io

假设我创建一个名为'lotsofdata'的长字符串,然后使用以下代码输出其内容:

        string outputFilePath = @"C:\output.txt";
        System.IO.File.WriteAllText(outputFilePath, lotsofdata);

        SpecialFunction1();
        SpecialFunction2();
        SpecialFunction3();

我的问题是,在继续运行SpecialFunction1之前,计算机是否完全将所有内容写入output.txt?或者,它是否将输出过程设置为运动并在输出过程完成之前转到SpecialFunction1?

我问,因为我想确保在继续执行SpecialFunction1()之前完成output.txt的编写,而我不知道如何确保这一点。

4 个答案:

答案 0 :(得分:7)

简单的答案是肯定的。

WriteAllText方法退出之前,基础流已填充且已关闭(重要位)。

  

File.WriteAllText方法

     

创建新文件,将内容写入文件,然后关闭   文件。如果目标文件已存在,则会被覆盖。

http://msdn.microsoft.com/en-us/library/system.io.file.writealltext%28v=vs.110%29.aspx

这不是所有文件编写的黄金法则。如果您直接写入FileStream,则需要确保拨打FlushClose(理想情况下,如果您愿意,请始终致电Close)确保在继续之前实际写入文件。

  

FileStream.Close方法

     

之前写入缓冲区的任何数据都会被复制到该文件中   文件流已关闭,因此无需先调用Flush   调用Close。调用Close后,对文件执行任何操作   流可能引发异常。关闭一次后,它就被调用了   如果再次打电话,什么都不做。

http://msdn.microsoft.com/en-us/library/aa328800%28v=vs.71%29.aspx

这里的关键点是,在将数据写入目的地之前,任何刷新流的操作都不会退出。

答案 1 :(得分:5)

是的,在首先提供的代码中,您将完成文件的写入文本,而之后只有将运行其他SpecialFunction个函数。

根据File.WriteAllText文档:

  

即使这样,该方法也可以保证文件句柄被关闭   异常被提出

因此,即使在大文件上, 也不应该有任何可疑的IO问题。

答案 2 :(得分:3)

System.IO.File.WriteAllText完成后,会将所有文本刷新到文件系统缓存,然后将 lazily 写入驱动器。

答案 3 :(得分:1)

所有发生在同一个线程中,因此您的文件将在其他任何事情发生之前写入。