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

2

using次のステートメントを使用することをお勧めします。

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

ただし、ステートメントを使用してオブジェクト初期化子を使用することにも注意する必要があります。

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セッターが例外をスローした場合Dispose()、一時変数に対して呼び出されません。

于 2013-04-19T13:56:16.223 に答える