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

C# 在我的C代码中,计算机是否会等到输出完成后再继续?,c#,io,C#,Io,假设我创建了一个名为“lotsofdata”的长字符串,然后用以下代码输出其内容: string outputFilePath = @"C:\output.txt"; System.IO.File.WriteAllText(outputFilePath, lotsofdata); SpecialFunction1(); SpecialFunction2(); SpecialFunction3(); 我的问题是,在

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

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

        SpecialFunction1();
        SpecialFunction2();
        SpecialFunction3();
我的问题是,在继续运行SpecialFunction 1之前,计算机是否完全将所有内容写入output.txt?或者,它是否在输出过程完成之前启动输出过程并转到SpecialFunction1


我这样问是因为我想确保在继续执行SpecialFunction 1()之前已写入output.txt,我不知道如何确保这一点。

是的,在首先提供的代码中,您将完成向文件中写入文本的操作,然后才运行其他
SpecialFunction
函数

根据文件:

此方法保证关闭文件句柄,即使 提出了例外情况


因此,即使在大文件上,您也不应该有任何并发IO问题。

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

简单的答案是肯定的

writealText
方法退出之前,填充并关闭底层流(重要位)

File.WriteAllText方法

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

这不是所有文件编写的黄金法则。如果直接写入
文件流
,如果要确保在继续之前确实写入了文件,则需要确保调用
刷新
关闭
(理想情况下,无论如何都应该调用
关闭

FileStream.Close方法

之前写入缓冲区的任何数据都会在 文件流已关闭,因此无需在之前调用Flush 调用Close。在调用Close后,对文件执行任何操作 流可能引发异常。在调用Close一次后,它 如果再次调用,则不会执行任何操作


这里给您的关键是,任何刷新流的操作都不会退出,直到数据被写入其目标。

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

在使用IO时,这并不总是正确的,只是在这种特定情况下正确。如果他没有使用
writealText
,而是使用了某种
StreamWriter
,并且从未关闭过文件,那么最后的文本位可能位于缓冲区中,而不是写入磁盘。您好,“lazly”写入是什么意思?听起来很特别,但我不知道你指的是什么。@phan“Lazy”通常用来表示“需要时处理”。阿尔贝托的意思是“异步”或“在后台”。但是,您不必担心这一点,因为对于您的应用程序来说,文件系统缓存和物理卷内容是相同的。