基本上我想创建一个文件,如果不存在则写入消息。
if (!File.Exists(filePath + fileName))
File.Create(filePath + fileName);
StreamWriter sr = new StreamWriter(filePath + fileName,false);
如何处理此错误?
该进程无法访问文件'c:\ blahblah',因为它正由另一个进程使用。
答案 0 :(得分:17)
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))
{
}
}
答案 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)
打开现有文件或创建新文件进行书写。