System.IO.File.Create锁定文件

Chr*_*ris 52 c# asp.net

我正在使用System.IO.File.Create来创建一个文件.我不是用流编写器写它,只是创建它.

当应用程序尝试打开新创建的文件时,前端出现服务器错误 - 该文件正在使用中.然后垃圾收集似乎出现,几分钟后一切都还可以.

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

我已经读过打开一个流编写器到文件然后立即关闭它将解决这个问题,但它似乎很乱.有更简单的方法吗?

小智 102

试试这个:

System.IO.File.Create(FullFName).Close();
Run Code Online (Sandbox Code Playgroud)

  • 不是一个大的,但这违反了一次性模式.我会用Dispose()(也调用Close)替换Close(). (14认同)

Edw*_*ing 74

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
}
Run Code Online (Sandbox Code Playgroud)

  • 我从来没有想到过这一点. (2认同)

Ode*_*ded 12

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

您必须关闭此流才能访问该文件.最好用using声明来完成:

using(FileStream fs = File.Create(path))
{
}
Run Code Online (Sandbox Code Playgroud)


Kev*_*Kev 8

使用时,File.Create您将获得FileStream退货.在您关闭流或直到FileStream对象被处置(由垃圾收集器的终结者)之前,它将保持打开并锁定.

FileStream实现,IDisposable以便您可以执行以下操作:

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

using语句是"语法糖",并使编译器生成功能上等同于的代码:

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

Dispose方法在Close内部调用.