在目录中创建文件后,只要我创建文件的程序正在运行,目录就会被锁定。有没有办法释放锁?我需要稍后重命名该行目录,我总是得到一个IOException
说"访问路径" ..."否认"
Directory.CreateDirectory(dstPath);
File.Copy(srcPath + "\\File1.txt", dstPath + "\\File1.txt"); // no lock yet
File.Create(dstPath + "\\" + "File2.txt"); // causes lock
答案 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()
。