程序运行时,在创建文件后锁定目录

时间:2013-04-19 13:38:14

标签: c# directory locked-files

在目录中创建文件后,只要我创建文件的程序正在运行,目录就会被锁定。有没有办法释放锁?我需要稍后重命名该行目录,我总是得到一个IOException说"访问路径" ..."否认"

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

3 个答案:

答案 0 :(得分: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语句确保您关闭流,并释放对该文件的锁定。

希望这有帮助

答案 1 :(得分:4)

您是否尝试过关闭FileStream? e.g。

var fs = File.Create(dstPath + "\\" + "File2.txt"); // causes lock
fs.Close();

答案 2 :(得分: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();
}

如果Position setter throw异常,则不会为临时变量调用Dispose()