创建或打开文件,然后向其追加数据

Create or Open file and then Append data to it

我们可以使用这样的代码打开或创建文件,然后将一些数据写入其中(所有内容将被替换)。

using (var file = File.Open(path, FileMode.OpenOrCreate))
    using (var stream = new StreamWriter(file))
        stream.WriteLine(_message);

或者我们可以使用下面的代码在文件末尾添加数据,假设文件存在。

using (var file = File.Open(path, FileMode.Append))
    using (var stream = new StreamWriter(file))
        stream.WriteLine(_message);

有什么方法可以将这 3 件事结合起来:((创建 || 打开)和追加)到文件中吗?

您可以创建自己的 FileStream 工厂,也可以像这样在一行中完成。

using (var file = File.Exists(path) ? File.Open(path, FileMode.Append) : File.Open(path, FileMode.CreateNew))
using (var stream = new StreamWriter(file))
    stream.WriteLine(_message);

如果要将数据追加到文件中,只需调用File.Seek(0, SeekOrigin.End)。这会将文件指针设置为文件末尾,即使用 FileMode.Append.

打开文件后的位置

例如:

using (var file = File.Open(path, FileMode.OpenOrCreate))
{
    file.Seek(0, SeekOrigin.End);
    using (var stream = new StreamWriter(file))
        stream.WriteLine(_message);
}

这是一个老问题,但它可能对某人有所帮助

您可以通过对类型进行 ORing 来打开

using (var file = File.Open(path, FileMode.OpenOrCreate | FileMode.Append))

来自 FileMode.Append 的文档:

Opens the file if it exists and seeks to the end of the file, or creates a new file. This requires Append permission. FileMode.Append can be used only in conjunction with FileAccess.Write. Trying to seek to a position before the end of the file throws an IOException exception, and any attempt to read fails and throws a NotSupportedException exception.

Source docs.microsoft.com

所以 Append 完全符合您的要求。