假设我创建一个名为'lotsofdata'的长字符串,然后使用以下代码输出其内容:
string outputFilePath = @"C:\output.txt";
System.IO.File.WriteAllText(outputFilePath, lotsofdata);
SpecialFunction1();
SpecialFunction2();
SpecialFunction3();
Run Code Online (Sandbox Code Playgroud)
我的问题是,在继续运行SpecialFunction1之前,计算机是否完全将所有内容写入output.txt?或者,它是否将输出过程设置为运动并在输出过程完成之前移至SpecialFunction1?
我问,因为我想确保在继续执行SpecialFunction1()之前写入output.txt,我不知道如何确保这一点.
简单的答案是肯定的.
在方法退出之前,底层流被填充和关闭(重要位)WriteAllText.
File.WriteAllText方法
创建一个新文件,将内容写入该文件,然后关闭该文件.如果目标文件已存在,则会被覆盖.
http://msdn.microsoft.com/en-us/library/system.io.file.writealltext%28v=vs.110%29.aspx
对于所有文件编写而言,这不是一个黄金法则.如果你直接写a FileStream,你需要确保你打电话Flush或Close(理想情况下,你应该总是打电话Close),如果你想确保在继续之前实际写入文件.
FileStream.Close方法
先前写入缓冲区的任何数据都会在文件流关闭之前复制到文件中,因此在调用Close之前不必调用Flush.在调用Close之后,对文件流的任何操作都可能引发异常.在调用一次关闭后,如果再次调用则不执行任何操作.
http://msdn.microsoft.com/en-us/library/aa328800%28v=vs.71%29.aspx
这里的关键点是,在数据写入目标之前,任何刷新流的操作都不会退出.
是的,在首先提供的代码中,您将完成文本的写入文本,并且只有在运行其他SpecialFunction函数之后.
根据File.WriteAllText文档:
文件句柄是保证通过这种方法关闭,即使异常升高
因此,即使在大文件上也不应该有任何可疑的IO问题.
System.IO.File.WriteAllText完成后,会将所有文本刷新到文件系统缓存中,然后将其延迟写入驱动器。