4

アップロードされた画像を処理する次の関数があります。

最初の試行 (IIS の再起動後) では正常に動作しますが、2 回目の試行では常に取得されます

ファイルが別のプロセスによって使用されているため、プロセスはファイルにアクセスできません

さて、どういうわけかファイルがIISによって開かれたままになっていることは理解していますが、

newFile.Flush();
newFile.Close();
newFile.Dispose();

完全な機能は次のとおりです。

private void SaveFile(HttpPostedFile file, string path)
{
    Int32 fileLength = file.ContentLength;
    string fileName = file.FileName;
    byte[] buffer = new byte[fileLength];
    file.InputStream.Read(buffer, 0, fileLength);

    FileStream newFile = new FileStream(path, FileMode.Create, FileAccess.Write);

    try
    {
        newFile.Write(buffer, 0, buffer.Length);
    }
    catch { }
    finally
    {
        newFile.Flush();
        newFile.Close();
        newFile.Dispose();
    }
}

更新:いくつかのチェックの後、IIS プロセス
以外にファイルをロックしているものはないと確信しています。w3wp.exe

4

1 に答える 1

-1

他の何かがファイルを開いたままにしている必要があります。または、最初の呼び出しが返される前に、(別のスレッドで)2番目の呼び出しが行われる可能性があります。

ちなみに、次のようなコードを記述したほうがよいでしょう。

private void SaveFile(HttpPostedFile file, string path)
{
    Int32 fileLength = file.ContentLength;
    string fileName = file.FileName;
    byte[] buffer = new byte[fileLength];
    file.InputStream.Read(buffer, 0, fileLength);

    using (FileStream newFile = new FileStream(path, FileMode.Create, FileAccess.Write))
    {
        newFile.Write(buffer, 0, buffer.Length);
    }
}
于 2012-07-09T10:39:16.683 に答える