假设我创建一个名为'lotsofdata'的长字符串,然后使用以下代码输出其内容:
string outputFilePath = @"C:\output.txt";
System.IO.File.WriteAllText(outputFilePath, lotsofdata);
SpecialFunction1();
SpecialFunction2();
SpecialFunction3();
我的问题是,在继续运行SpecialFunction1之前,计算机是否完全将所有内容写入output.txt?或者,它是否将输出过程设置为运动并在输出过程完成之前转到SpecialFunction1?
我问,因为我想确保在继续执行SpecialFunction1()之前完成output.txt的编写,而我不知道如何确保这一点。
答案 0 :(得分:7)
简单的答案是肯定的。
在WriteAllText
方法退出之前,基础流已填充且已关闭(重要位)。
File.WriteAllText方法
创建新文件,将内容写入文件,然后关闭 文件。如果目标文件已存在,则会被覆盖。
http://msdn.microsoft.com/en-us/library/system.io.file.writealltext%28v=vs.110%29.aspx
这不是所有文件编写的黄金法则。如果您直接写入FileStream
,则需要确保拨打Flush
或Close
(理想情况下,如果您愿意,请始终致电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)
所有发生在同一个线程中,因此您的文件将在其他任何事情发生之前写入。