2011-01-13 49 views
45

我正在使用System.IO.File.Create创建文件。我不是用流式编写器写它,只是创建它。System.IO.File.Create锁定文件

当应用程序尝试打开新创建的文件时,前端出现服务器错误 - 该文件正在使用中。垃圾收集似乎随之而来,几分钟后一切正常。

现在我知道如果我正在使用Streamwriter,我将不得不关闭它。这同样适用于创建?

我读过,打开一个流编写器的文件,然后立即关闭它会解决这个问题,但它似乎凌乱。有一种更简单的方法吗?

+0

让我们看看你的代码 – Kev 2011-01-13 13:00:09

回答

64

File.Create返回FileStream。你应该像这样使用它:

using (FileStream fs = File.Create(path)) 
{ 
    //you can use the filstream here to put stuff in the file if you want to 
} 
+1

我不得不从来没有想过。 – Traubenfuchs 2016-07-04 19:14:46

11

创建文件会打开一个FileStream,因此锁定它(File.Create返回FileStream)。

您必须关闭此流才能访问该文件。这是最好用using语句来完成:

using(FileStream fs = File.Create(path)) 
{ 
} 
1

Create方法将返回一个文件句柄。在重新使用文件之前,文件句柄应该被关闭。请参阅MSDN文章File.Create Method (String)中的详细信息。

总结:

通过这种方法创建的FileStream对象具有无的默认文件共享值;在原始文件句柄关闭之前,没有其他进程或代码可以访问创建的文件。

8

使用File.Create时,返回FileStream。直到您关闭流或直到FileStream对象被丢弃(由垃圾收集器的终结者),它将保持打开并锁定状态。

FileStream实现IDisposable这样你就可以做到以下几点:

using(FileStream fs = File.Create(filename)) 
{ 
    // Do stuff like write to the file 
} 

using说法是“语法糖”,使编译器生成的代码,在功能上等同于:

FileStream fs = File.Create(filename) 
try 
{ 
    // Do stuff like write to the file 
} 
finally 
{ 
    fs.Dispose(); 
} 

Dispose方法在内部调用Close

1

我所用: System.IO.File.Create(sFullFileName);

以上.Create方法没有关闭文件

我现在使用: System.IO.File.WriteAllText(sFullFileName, "Uploading");

此方法创建并关闭文件(注:我把字符串“上传”在文件中,但我相信string.Empty也将工作。

80

试试这个:

System.IO.File.Create(FullFName).Close(); 
+1

这是完美的,当你只是想创建一个空白文件。 – TTT 2013-01-26 18:45:35