C#打开一个.txt文件,供应用程序打开并正在写入时查看

时间:2012-06-26 23:40:25

标签: c# windows

我的项目: 我正在为机器视觉系统创建一个夜间测试系统。我希望能够看到实时结果,而不是等待所有测试完成。我们的旧系统是用C ++编写的,可以使用记事本或任何文本编辑器访问日志文件,以便在写入时查看(.txt)。

我是怎么做到的: 几年前,一位同事创建了一个日志文件编写类,我们的应用程序使用了很多。我尝试使用这个类中的dll,一切都很好。但是,如果我在应用程序使用它时尝试打开其中一个日志文件,则会出现访问冲突错误:另一个进程正在使用该文件。

我是如何让它发挥作用的: 我只是从其他项目中复制了该类并将其粘贴到我的项目命名空间中。这解决了这个问题。

我的问题: 为什么这样做,但是当我使用dll的引用时却没有?我想"修复"或者"更新"我部门中的每个人都使用的Logging类,因此我的同事可以在我们的C#应用​​程序中享受这些附加功能。

操作系统:Win 7 32位/ Win XP / Visual Studio 2005和Visual Studio 2010。

我们如何创建文件的代码如下,我们使用streamwriters写入文件。

非常感谢任何帮助。

提前致谢, 乙

    /// <summary>
    /// Creates a file with the given file name or else uses the defualt.
    /// </summary>
    /// <param name="fileName">Name of file to create, if null use default.</param>
    /// <param name="append">Whether to append to file if it already exists</param>
    /// <returns>StreamWriter to the created file.</returns>
    private StreamWriter CreateFile(string fileName, bool append)
    {
        FileStream fsOut;
        StreamWriter sw;
        if (append)
        {
            //sw = File.AppendText(fileName);
            //just a note I tried many different modifiers of the FileAccess property and nothing seemed to work.
            fsOut = File.Open(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
        }
        else
        {
            //sw = new StreamWriter(fileName);
            fsOut = File.Create(fileName);
        }

        sw = new StreamWriter(fsOut);
        sw.AutoFlush = true;
        return sw;
    }

1 个答案:

答案 0 :(得分:2)

fsOut = File.Create(fileName);将以非共享模式打开文件。所以我怀疑你的“解决方案”与复制代码没什么关系,而是发生了“追加”代码路径而不是新代码。

这两个进程都应该打开具有兼容FileShare标志的文件,因此请确保永远不要使用默认的“share-none”标志打开日志文件。