保存上传的文件 - 进程无法访问

时间:2012-07-09 10:33:49

标签: c# upload permissions

我有以下功能来处理上传的图像。

它在第一次尝试(重启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进程。

1 个答案:

答案 0 :(得分:0)

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

顺便说一下,你最好这样编写代码:

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);
    }
}