下载文件时出错:进程无法访问文件'[filepath]',因为它正由另一个进程使用

时间:2013-06-17 09:04:36

标签: c# asp.net upload download filestream

我有一个应用程序,我必须上传文件,并有一个选项来下载这些文件。当我上传文件时它没有任何问题,但问题是下载选项。当我尝试下载上传文件时,它会显示以下错误消息

该进程无法访问文件'[filepath]',因为它正由另一个进程使用。

当我尝试30分钟后,我没有收到任何错误,但如果我上传新文件并尝试下载,则会出现同样的错误。

以下是我的下载和上传代码。请帮我弄清问题在哪里。

上传

FileStream fileStream = File.Create(HttpContext.Current.Server.MapPath("myfile.pdf"), (int)filestream.Length);
byte[] bytesInStream = new byte[filestream.Length];
filestream.Read(bytesInStream, 0, bytesInStream.Length);
fileStream.Write(bytesInStream, 0, bytesInStream.Length);

下载

HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=myfile.pdf");

FileStream sourceFile = new FileStream(HttpContext.Current.Server.MapPath("myfile.pdf"), FileMode.Open);
long FileSize;
FileSize = sourceFile.Length;
byte[] getContent = new byte[(int)FileSize];
sourceFile.Read(getContent, 0, (int)sourceFile.Length);
sourceFile.Close();

HttpContext.Current.Response.BinaryWrite(getContent);
HttpContext.Current.Response.End();

上传后文件似乎没有发布但我不知道如何在上传后释放该文件,以免下载时出现任何问题。

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。有一个小看但很大的错误。我忘记在上传功能结束时放在下面一行:

fileStream.Dispose();

因为我没有处理流对象,我的文件仍然被该对象使用,我认为垃圾收集器在一段时间后发布了我的文件,这就是为什么我以后可以下载它。