文件writealllines的访问状态

时间:2018-08-13 04:16:44

标签: c# file

我正在使用file.WriteAllLines将一些文本写入文件。我希望在WriteAllLines写入文件时使用。不允许其他两个进程读取或写入文件。这是WriteAllLines的默认行为吗?

1 个答案:

答案 0 :(得分:0)

由于内部的WriteAllLines方法使StreamWriter在文件中保持打开状态,直到所有行都被写入为止,其他进程也无法写入同一文件。

请参见the C# language reference

中的实现细节

[更新]

此测试也证明无法读取,该测试在IOException中抛出了readerThread

using System.IO;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject3
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            string[] lines = new string[5000000];

            for (int i = 0; i < 5000000; i++)
            {
                lines[i] = $"Line_{i}";
            }

            Thread writerThread = new Thread(() =>
            {
                File.WriteAllLines("C:\\tmp\\wal_test.txt", lines);
            });

            Thread readerThread = new Thread(() =>
            {
                File.ReadLines("C:\\tmp\\wal_test.txt");
            });

            writerThread.Start();
            Thread.Sleep(100);
            readerThread.Start();
        }
    }
}