当我在C#中写入文件时,如何定义文件以仅对其他任何进程读取?

时间:2019-07-15 13:28:17

标签: c# .net file-permissions

我正在写入文件时,我希望阻止任何其他进程将其写入文件,但允许从文件中读取。

我正在使用这个

File.AppendAllText(fileName.csv, data)

1 个答案:

答案 0 :(得分:0)

打开文件时,您需要使用FileShare.Read。要自己指定此标志,您需要同时创建FileStreamStreamWriter

using (var fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
{
    fileStream.Seek(0, SeekOrigin.End);
    using (var streamWriter = new StreamWriter(fileStream))
    {
        streamWriter.Write(text);
        Console.ReadLine();
    }
}

但是,如果您深入研究.NET的源代码,则可以看到File.AppendAllText使用了correct sharing mode,因此您无需执行任何操作即可防止其他进程写入文件当您附加到它时。

FileStream f = new FileStream(path, mode, FileAccess.Write, FileShare.Read,
            DefaultFileStreamBufferSize, FileOptions.SequentialScan, Path.GetFileName(path), false, false, checkHost);

这并不奇怪。如果File.AppendAllText允许在附加文本时其他进程将文件写入文件,则您可能会感到非常讨厌且难以发现错误。