4

我有以下函数来处理上传的图像。

它在第一次尝试时工作正常(重新启动 IIS 后),但在第二次尝试时我总是得到

该进程无法访问该文件,因为它正被另一个进程使用

现在,我确实知道文件以某种方式被 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();
    }
}

更新:
经过几次检查,我确信没有其他任何东西可以锁定文件,但这w3wp.exe是 IIS 进程。

4

1 回答 1

-1

必须有其他东西保持文件打开 - 或者可能在第一次调用返回之前进行了第二次调用(在单独的线程上)。

顺便说一句,您最好编写如下代码:

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 回答