使用方法:System.IO.File.Create()
创建文件后,进程仍然使用它,我无法删除它。
任何想法如何更好地创建文件,应该是一个0byte文件,然后以某种方式关闭和处置?
答案 0 :(得分:26)
JL,
您应该在using语句中包含对.Create的调用,以便正确关闭.Create返回的FileStream。 IE:
using (File.Create("path")){...}
答案 1 :(得分:14)
Create方法不仅会创建文件,还会打开它并返回一个可用于写入文件的FileStream对象。
您必须自己关闭文件,否则在垃圾收集器清理FileStream对象之前不会关闭它。
最简单的方法是使用Create方法返回的引用简单地关闭文件:
File.Create(fileName).Close();
答案 2 :(得分:12)
nikmd23的答案很简短,答案很长:FileStream
返回的File.Create(...)
没有被确定性地处理,因此当你试图删除它时,它的文件句柄没有关闭。
正如nikmd23所说的那样,用File.Create(...)
语句包裹你的using
电话将确保关闭并处理该流:
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)
答案 3 :(得分:1)
几乎在所有情况下都应该使用nikmd23的答案。如果您无法,因为您需要将FileStream
传递给其他地方,请务必最终调用FileStream.Close
方法。您最好拥有“拥有”FileStream
工具IDisposable
本身的类,并使用其Dispose
方法关闭该流。
有关实施IDisposable
的更多信息,请参阅the MSDN documentation。更容易阅读,更新,关于这个主题Joe Duffy's post。
答案 4 :(得分:1)
using(FileStream f = File.Create(file_path))
{
// ... do something with file
f.Close();
}
“f.Close();”行立即关闭文件。如果不手动关闭,处理可能无法关闭它。
答案 5 :(得分:0)
请参阅System.IO.File.Create(String)
Method参数并返回值说明
参数
路径 输入:
System.String
要创建的文件的路径和名称。返回值
输入:
System.IO.FileStream
FileStream
,提供对路径中指定的文件的读/写访问权。
FileStream
返回值用于IO访问创建的文件。如果您对编写(或阅读)新创建的文件close the stream不感兴趣。这就是using
块确保的目的。