如何创建一个已经填充的文本文件?

How do I create an already populated text file?

我想创建一个扩展名为 .jrq 的文本文件,并用两行填充它。但是我希望这发生 "all at once" 而不是创建文本文件然后 然后 添加这两行。基本上我需要创建一个已经填充的文本文件。

这是我当前的代码:

FileStream fileStream = new FileStream(folder + filename + ".jrq", FileMode.Create);
StreamWriter streamWriter = new StreamWriter(fileStream);

streamWriter.WriteLine("Line1");
streamWriter.WriteLine("Line2");

streamWriter.Flush();
streamWriter.Close();

我需要文件创建和文件附加一起发生的原因是因为我有一个 windows 服务扫描将在其中创建此文本文件的文件夹,并且该服务第二次触发作业它看到一个 .jrq 文件(并根据文件中的内容执行逻辑)。它在我向其中写入任何内容之前注意到 .jrq 文件并抛出错误。

File.WriteAllText 就是您要找的。如果该文件不存在,它将在创建时使用其中的文本创建它。

您可以用不同的文件名写入文件,然后在填充后移动它。根据 this question,文件移动在 NTFS 中是原子的,因此您的服务永远不会看到写入一半的文件。

我认为你最好使用一个小技巧。正如 adv12 所指出的那样,使用一种方法一次编写所有内容并不能保证实现是原子的。如果我是你,我会创建一个临时文件:

FileStream fileStream = new FileStream(folder + filename + ".tmp", 

FileMode.Create);
StreamWriter streamWriter = new StreamWriter(fileStream);

streamWriter.WriteLine("Line1");
streamWriter.WriteLine("Line2");

streamWriter.Flush();
streamWriter.Close();

然后使用 File.Move:

重命名
System.IO.File.Move(folder + filename + ".tmp",folder + filename + ".jrq");

因此当文件jrq 充满数据时作业将开始。这不是一个超级优雅的解决方案,但它会起作用。

希望对您有所帮助。