[英]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.