【问题标题】:Append to the same text file in c#在c#中追加到相同的文本文件
【发布时间】:2013-10-17 15:42:54
【问题描述】:

我需要使用在多个实例中运行的相同代码附加到文本文件。在 try 块中,我打开文件,写入一条记录并关闭。

        lfilExceptionLogFileStream = new FileStream(istrExceptionInfoFullFileName, FileMode.Append, FileAccess.Write, FileShare.Write);
        lfilExceptionLog = new StreamWriter(lfilExceptionLogFileStream);

如果有问题,在 catch 块中我暂停 1 秒 System.Threading.Thread.Sleep(1000); 并调用相同的函数。我重试了 99 次。

FileShare.Write 当我同时测试 3 次时 - 数据丢失。 FileShare.None - 长时间锁定文件

我已经尝试了很多。如果有一种简单的方法可以找到文件是否被锁定,我可以等到它被锁定。我尝试过使用锁定对象 - 没有运气

如果有人可以提供可行的解决方案,请欣赏。

拉维

【问题讨论】:

    标签: multithreading file text concurrency append


    【解决方案1】:

    我认为最简单的解决方案是:

    1. 开始创建StreamWriter
    2. 创建同步版本 StreamWriter.Synchronized(lfilExceptionLog)
    3. 将同步实例传递给所有线程并使用它来记录内容。
    4. 完成后关闭 StreamWriter。

    【讨论】:

    • 我改为 StreamWriter.Synchronized - 我仍然需要使用重试逻辑。我有一个调用此 DLL 的控制台应用程序。我从多个窗口执行相同的 EXE
    • 感谢 Sergey 1. 添加重试逻辑 2. 从 4 个窗口执行控制台应用程序 3. 每个窗口调用该方法 100,000 次 这很好用。我只担心重试次数超过 99 次的限制我不会捕获我在控制台上显示重试的所有内容,并且所有窗口都有重试如果这没有意义,请告诉我
    • 我认为重试是错误的做法。我认为要么每个可执行文件都应写入自己的文件,然后最后将它们组合起来,要么使用一些进程间同步,例如 Mutex msdn.microsoft.com/en-us/library/system.threading.mutex.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2020-10-28
    • 1970-01-01
    • 2013-10-26
    • 2012-09-21
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多