C#无法写入文件(“正在被另一个进程使用”)?

3
我希望有人能解释一下为什么会出现这种情况 :)
当我使用以下代码时,它会给我一个错误:“由于另一个进程正在使用,因此无法访问文件'C:\ test.txt'。”
我对C#非常陌生,所以不确定发生了什么事情,提前感谢!
String fileNameBefore = @"C:\\test.txt";

public void output(String hex)
{
    using (StreamWriter writer = new StreamWriter(fileNameBefore, true))
    {
        writer.Write(hex);
        writer.Close();
    }
}

你是否有其他程序(或可能是同一个程序)在写入该文件吗?提供一个简短但完整的演示问题的程序将非常有帮助。 - Jon Skeet
你在代码中是否声明或使用了任何其他引用fileNameBefore的writer变量? - MethodMan
这个程序运行在什么上下文中?是一个网站还是一个独立的应用程序? - Pharabus
也许你的进程没有正确关闭(ctrl alt del 并结束它)。或者你在编辑器中打开了那个文件? - patrick
使用 ProcessExplorer 查找哪个程序正在打开该文件以及原因。 (它可能是您程序的另一个实例!)在 Windows 中,除非设置了特殊的“共享”标志,否则即使仅进行“只读”操作,文件也会被独占打开。 - user166390
3个回答

6
关闭文本文件后再写入它。(不是在代码中...物理上关闭文本文件)

这可能是一个非常好的猜测,我自己也完全这样做过 :) - Pharabus
这很可能是原因,不同的程序操作方式不同:记事本会保持文件锁定状态,而Wordpad则会释放该句柄。(或者反过来吗?)我只想提一下ProcessExplorer,因为它可以成为一个非常有用的工具,可以找出哪个程序打开/锁定了文件。 - user166390

4
在Windows Vista和Windows 7中,系统卷的根目录(通常是C:)具有特殊保护:除了创建或删除非系统文件夹外,程序必须以完整管理员权限运行才能执行任何其他操作。程序不允许在那里创建文件。为什么会显示文件正在被另一个进程使用?我本来期望看到另一条消息,但我想这确实是原因...除非您有其他程序打开该文件并且对我们所见到的代码具有足够的权限。

1
那不会是一个SecurityException吗? - Oskar Kjellin
这就是让我感到困惑的点。但同时,文件被其他进程独占打开而没有注意到的可能性也不大。 - Mario
1
这真的并不那么不可能 :) - Oskar Kjellin

0

请确保通过在Windows任务管理器中检查进程并查找您的进程名称来正确关闭进程,如果发现任何问题,请手动点击“结束进程”按钮并重试。

如果这样做不起作用,请尝试将文件路径移动到可写区域,例如桌面,因为如Mario所说,根目录受到保护。

还要检查文件是否被隐藏或写保护。

希望这可以帮助,敬礼 汤姆


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接