繁体   English   中英

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

[英]C# Open a .txt file for viewing while application has it open and is writing to it

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

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

我是如何使它工作的:我只是从另一个项目复制该类并将其粘贴到我的项目命名空间中。 这解决了这个问题。

我的问题:为什么这会起作用,但是当我使用dll的引用时却不行? 我想“修复”或“更新”我部门中每个人都使用的Logging类,这样我的同事就可以在我们的C#应用​​程序中享受这些附加功能。

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

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

任何帮助将不胜感激。

提前谢谢,B

    /// <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;
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM