我有以下功能来处理上传的图像。
它在第一次尝试(重启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进程。
答案 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);
}
}