使用StreamWriter时,进程无法访问该文件

本文关键字:访问 文件 进程 StreamWriter 使用 | 更新日期: 2023-09-27 17:58:16

基本上,如果不存在,我想创建一个文件,然后向其写入消息。

if (!File.Exists(filePath + fileName))
    File.Create(filePath + fileName);
StreamWriter sr = new StreamWriter(filePath + fileName,false);

如何处理这个错误?

进程无法访问文件"c:''blablah",因为另一个进程正在使用该文件。

使用StreamWriter时,进程无法访问该文件

File.Create打开FileStream(http://msdn.microsoft.com/en-us/library/d62kzs03.aspx)。

由于您没有处理它,因此文件将保持锁定状态,如果从其他句柄(即其他FileStream或整个StreamWriter)执行这些操作,则由于这种情况,对文件的后续访问将失败。

此代码演示了如何使用IDisposable对象(如FileStream:)

if (!File.Exists(filePath + fileName))
{
    File.Create(filePath + fileName).Dispose();
    using(StreamWriter sr = new StreamWriter(filePath + fileName,false))
    {
    }
}

为什么不直接使用接受文件名的StreamWriter构造函数?

StreamWriter sr = new StreamWriter(filePath + fileName);

来自MSDN:

路径参数可以是文件名,包括通用命名约定(UNC)共享上的文件如果文件存在,则覆盖该文件;否则,将创建一个新文件

非常小的一点,但在连接文件名和文件夹路径时可以考虑使用Path.Combine

使用单一方法创建和打开文件来简化代码:

using (FileStream fs = File.OpenWrite(path)) 
{
    Byte[] info = new UTF8Encoding(true)
                         .GetBytes("This is to test the OpenWrite method.");
    fs.Write(info, 0, info.Length);
}

MSDN:(File.OpenWrite方法)

打开现有文件或创建新文件进行写入。