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

时间:2008-11-26 15:21:23

标签: c# .net exception-handling

我有一个ASP.NET程序,我使用webClient类的DownloadFile方法从web下载文件并对其进行一些修改。然后我将它保存到另一个具有唯一名称的文件夹。当我收到此错误时

  

该进程无法访问文件'D:\ RD \ dotnet \ abc \ abcimageupload \ images \ TempStorage \ tempImage.jpg',因为它正由另一个进程使用

有谁能告诉我如何解决这个问题。

6 个答案:

答案 0 :(得分:6)

一般来说,我认为你的代码看起来应该是这样的。

WebClient wc = new WebClient();
wc.DownloadFile("http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png", "Foo.png");
FileStream fooStream;
using (fooStream = new FileStream("foo.png", FileMode.Open))
{
    // do stuff
}
File.Move("foo.png", "foo2.png");

答案 1 :(得分:4)

使用SysInternals中的工具跟踪哪些应用程序正在访问文件并导致此类问题,我取得了很好的成功。

Process Monitor是您想要的工具 - 将其设置为将输出过滤到您感兴趣的文件夹中的文件,并且您将能够看到对该文件的每次访问。

不必猜测问题是什么。

答案 2 :(得分:1)

尝试以下操作,将文件流设置为异步模式(第3个参数)

FileStream myStream = File.Create(fileName, results.Length,FileOptions.Asynchronous);
//make sure you close the file
myStream.Write(results, 0, results.Length);
myStream.Flush();
myStream.Close();
myStream.Dispose();

如果失败则重置您访问它的文件b4的属性

File.SetAttributes(Server.MapPath(sendFilepath), FileAttributes.Normal);

答案 3 :(得分:0)

您是否在进行更改后明确关闭了文件流?

答案 4 :(得分:0)

我不知道这是否能解决你的问题..

在写入文本文件然后尝试打开它时,我得到了完全相同的错误。

通过刷写编写器然后在写入文件后关闭它来解决它。

答案 5 :(得分:0)

这可能会有所帮助....对不起它的VB不是C而是嘿......

这有效

    Dim fs As FileStream = Nothing
    fs = File.Create("H:\test.txt")
    fs.Close()
    File.Delete("H:\test.txt")

这不,给“另一个进程使用的文件”错误

    File.Create("H:\test.txt")
    File.Delete("H:\test.txt")