【发布时间】:2012-07-08 17:58:39
【问题描述】:
我有以下函数来处理上传的图片。
第一次尝试(重新启动 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 进程之外没有其他任何东西锁定文件。
【问题讨论】:
-
它不能回答你的问题,但可以解决你的问题。您是否尝试过在
HttpPostedFile上使用SaveAs 方法而不是创建新文件流?我不知道为什么它会有所帮助,但我怀疑提供SaveAs方法可能有一个鬼鬼祟祟的原因...... -
我确实尝试过,但结果相同。
-
您是否正在处理传递给 SaveFile 函数的 HttpPostedFile 对象?
-
@Alex - 什么时候需要处理虚拟文件? O.o
-
@Dementic 它没有,这就是我问的原因。框架会处理这个问题,并且在极少数情况下手动处理它可能会导致问题。附带说明一下,
catch { }会在某些时候出现大量问题,我强烈建议将其删除(尝试...最后没有捕获就可以了)
标签: c# upload permissions