我的项目: 我正在为机器视觉系统创建一个夜间测试系统。我希望能够看到实时结果,而不是等待所有测试完成。我们的旧系统是用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;
}
答案 0 :(得分:2)
fsOut = File.Create(fileName);
将以非共享模式打开文件。所以我怀疑你的“解决方案”与复制代码没什么关系,而是发生了“追加”代码路径而不是新代码。
这两个进程都应该打开具有兼容FileShare标志的文件,因此请确保永远不要使用默认的“share-none”标志打开日志文件。