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

时间:2013-02-08 15:11:16

标签: c# file

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

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

如何处理此错误?

  

该进程无法访问文件'c:\ blahblah',因为它正由另一个进程使用。

3 个答案:

答案 0 :(得分:17)

File.Create打开FileStreamhttp://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))
    {

    }
}

答案 1 :(得分:4)

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

StreamWriter sr = new StreamWriter(filePath + fileName);

来自MSDN

  

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

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

答案 2 :(得分:3)

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

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 Method

  

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