C# 在.NET中锁定文件

C# 在.NET中锁定文件,c#,.net,f#,io,mutex,C#,.net,F#,Io,Mutex,我需要修改来自多个.NET进程的文本文件,我尝试过的任何方法都不能可靠地工作。我有一个C#GUI应用程序,它可以启动多个进程来进行数字运算。这些需要每隔几毫秒向同一文本文件追加行。主进程监视文件的大小,一旦达到某个阈值,就会上载并删除该文件 按照当前的编码方式,如果文件不存在,则追加文本的过程会创建该文件,但这很容易更改 如何实现这一点?此方法将重复尝试打开文件,直到文件可以写入,并在10毫秒后超时 private static readonly TimeSpan timeoutPeriod =

我需要修改来自多个.NET进程的文本文件,我尝试过的任何方法都不能可靠地工作。我有一个C#GUI应用程序,它可以启动多个进程来进行数字运算。这些需要每隔几毫秒向同一文本文件追加行。主进程监视文件的大小,一旦达到某个阈值,就会上载并删除该文件

按照当前的编码方式,如果文件不存在,则追加文本的过程会创建该文件,但这很容易更改


如何实现这一点?

此方法将重复尝试打开文件,直到文件可以写入,并在10毫秒后超时

private static readonly TimeSpan timeoutPeriod = new TimeSpan(100000); // 10ms
private const string filename = "Output.txt";

public void WriteData(string data)
{
    StreamWriter writer = null;
    DateTime timeout = DateTime.Now + timeoutPeriod;
    try
    {
        do
        {
            try
            {
                // Try to open the file.
                writer = new StreamWriter(filename);
            }
            catch (IOException)
            {
                // If this is taking too long, throw an exception.
                if (DateTime.Now >= timeout) throw new TimeoutException();
                // Let other threads run so one of them can unlock the file.
                Thread.Sleep(0);
            }
        }
        while (writer == null);
        writer.WriteLine(data);
    }
    finally
    {
        if (writer != null) writer.Dispose();
    }
}

你传递的是哪种价值观?你可以先告诉我们你尝试了哪些不可靠的东西。很难告诉我们你想要实现什么。如果您只是在试验文件系统信号量,那么最好查看您的源代码,看看哪里出了问题。若您需要一个合适的解决方案,也许您只需要一个轮询消息队列并执行线程安全写入的单例。这里有一个很好的例子,你为什么在这个上面加上“F”?您正在寻找F#中的解决方案吗?如果您已经有一个主进程来监视文件,为什么不传递要附加到该进程的行,并让主进程执行附加操作呢?