1

既存の一時ディレクトリ (d:\temp) を指定して、次のコードを実行します。

[Test]
    public void Test()
    {
        for (int i = 0; i < 10000; i++)
        {
            Console.WriteLine(i);
            File.WriteAllText(@"d:\temp\file.txt", " ");
            File.Delete(@"d:\temp\file.txt");
        }
    }

for ループでしばらくすると、次の例外が表示されます。

System.UnauthorizedAccessException : Access to the path 'd:\temp\file.txt' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.StreamWriter.CreateFile(String path, Boolean append)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
at System.IO.File.WriteAllText(String path, String contents, Encoding encoding)
at System.IO.File.WriteAllText(String path, String contents)

もちろん、次のように Thread.Sleep(10) を追加してコードを変更すると:

[Test]
    public void Test()
    {
        for (int i = 0; i < 10000; i++)
        {
            Console.WriteLine(i);
            File.WriteAllText(@"d:\temp\file.txt", " ");
            File.Delete(@"d:\temp\file.txt");
            Thread.Sleep(10);
        }
    }

すべて問題ありませんが、すべてを機能させるためにスリープを追加したくありません。なぜそのような行動をするのですか?

4

0 に答える 0