3

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

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

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

4

6 回答 6

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");
于 2008-11-26T15:44:31.347 回答
4

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

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

无需猜测问题所在。

于 2008-11-27T05:57:40.640 回答
1

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

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);
于 2009-03-25T02:17:32.600 回答
0

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

于 2008-11-26T15:23:34.680 回答
0

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

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

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

于 2009-01-17T20:00:28.737 回答
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")
于 2009-04-08T15:25:33.913 回答