3

在目录中创建文件后,只要创建该文件的程序正在运行,该目录就会被锁定。有什么办法可以解除锁吗?稍后我需要重命名目录几行,我总是得到一个IOException说法“访问路径”......“被拒绝”。

Directory.CreateDirectory(dstPath);
File.Copy(srcPath + "\\File1.txt", dstPath + "\\File1.txt"); // no lock yet
File.Create(dstPath + "\\" + "File2.txt"); // causes lock
4

3 回答 3

8

File.Create(string path)创建一个文件并使流保持打开状态。

您需要执行以下操作:

Directory.CreateDirectory(dstPath);
File.Copy(srcPath + "\\File1.txt", dstPath + "\\File1.txt");
using (var stream = File.Create(dstPath + "\\" + "File2.txt"))
{
    //you can write to the file here
}

using 语句确保您将关闭流并释放对文件的锁定。

希望这可以帮助

于 2013-04-19T13:43:37.880 回答
4

你试过关闭你的FileStream吗?例如

var fs = File.Create(dstPath + "\\" + "File2.txt"); // causes lock
fs.Close();
于 2013-04-19T13:40:27.073 回答
2

我建议你使用一个using语句:

using (var stream = File.Create(path))
{
   //....
}

但您还应该注意在 using 语句中使用对象初始化器:

using (var stream = new FileStream(path) {Position = position})
{
  //....
}

在这种情况下,它将被编译为:

var tmp = new FileStream(path);
tmp.Position = position;
var stream = tmp;

try
{ }
finally
{
    if (stream != null)
        ((IDisposable)stream).Dispose();
}

如果Positionsetter 抛出异常,Dispose()则不会为临时变量调用。

于 2013-04-19T13:56:16.223 回答