我想创建一个扩展名为.jrq的文本文件,并用两行填充它。但是,我希望“一次性”发生这种情况,而不是创建文本文件,然后然后添加两行。基本上我需要创建一个已经填充的文本文件。
这是我目前的代码:
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文件并引发错误。
答案 0 :(得分:3)
您可以使用不同的文件名编写文件,然后在填充后移动它。根据{{3}},文件移动在NTFS中是原子的,因此您的服务永远不会看到半写文件。
答案 1 :(得分:2)
我认为你最好使用小技巧。正如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充满数据时,作业将开始。它不是一个超级优雅的解决方案,但它会起作用。
希望它有所帮助。
答案 2 :(得分:0)
File.WriteAllText是您正在寻找的。如果该文件不存在,它将在创建时创建文本。