使用方法:
System.IO.File.Create()
创建文件后,它仍然被进程使用,我无法删除它。 有什么更好的方法可以创建一个大小为0字节的文件,然后关闭和处理吗?JL,
你应该使用 using 语句来包装你对 .Create 的调用,这样 .Create 返回的 FileStream 就能被正确地关闭。例如:
using (File.Create("path")){...}
using
。 - wefwfwefweFile.Create(fileName).Close();
nikmd23给出了简短的答案,长答案是:返回的FileStream
没有被确定性地处理,因此当您尝试删除它时,它的文件句柄未关闭。
正如nikmd23所说,使用using
语句包装您的File.Create(...)
调用将确保流被关闭和处理:
using (FileStream fs = File.Create(path)) {
// do anything with the stream if need-be...
}
File.Delete(path); //after it's been disposed of.
using(...)
块只是编译器语法糖的一个简化表达:
FileStream fs = File.Create(path);
try {
// do anything with the stream if need-be...
}
finally {
fs.Dispose();
}
File.Delete(path)
using(FileStream f = File.Create(file_path))
{
// ... do something with file
f.Close();
}
"f.Close();"这行代码会立即关闭文件。如果不手动关闭,Disposing可能无法关闭它。
Dispose
不会关闭文件?据我所知,它 总是 会关闭文件。 - John SaundersDispose
方法,进而调用Close
方法,因此在using
块的末尾调用Close
是多余的。 - Guffa在几乎所有情况下,您应该使用nikmd23的答案。如果您不能这样做,因为您需要将FileStream
传递到其他地方,请确保最终调用FileStream.Close
方法。最好的方法是让“拥有”FileStream
的类本身实现IDisposable
,并在其Dispose
方法中关闭流。
有关实现IDisposable
的更多信息,请参阅MSDN文档。更易读且更为实时的是Joe Duffy的文章。
参见 System.IO.File.Create(String)
方法 的参数和返回值描述
参数
path 类型:
System.String
要创建的文件的路径和名称。返回值
类型:
System.IO.FileStream
一个提供对指定路径中的文件进行读写访问的
FileStream
。
FileStream
的返回值用于对所创建的文件进行IO访问。如果您对新创建的文件不感兴趣(无论是写入还是读取),请关闭流。这就是 using
代码块确保的内容。
using (FileStream fs = File.Create(".."))
吗?(一旦进程退出,这并不重要)? - Chris SCreate
方法返回一个FileStream
。 - Cecil Has a Name