.NET File.Create,之后无法删除文件

时间:2009-09-25 14:48:04

标签: c# .net file-io

使用方法:System.IO.File.Create()

创建文件后,进程仍然使用它,我无法删除它。

任何想法如何更好地创建文件,应该是一个0byte文件,然后以某种方式关闭和处置?

6 个答案:

答案 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块确保的目的。