2008-11-26 85 views
3

我有一个ASP.NET程序,我从web上使用webClient Class的DownloadFile方法下载文件,并对其做一些修改。那么我用一种独特的name.When它保存到另一个文件夹我收到此错误无法访问文件,因为它正在被另一个进程使用

该进程无法访问该文件“d:\ RD \ DOTNET \ ABC \ abcimageupload \影像\ TempStorage \ tempImage.jpg '因为它正在被另一个进程使用

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

+1

请张贴一些代码 - 这是很难说问题出在哪里,否则。 – 2008-11-26 15:28:21

回答

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"); 
0

您是否在进行更改后显式关闭文件流?

+0

是的我正在使用file.Dispose()方法 – Shyju 2008-11-26 15:25:48

+1

如果你手动*调用Dispose(),你是否在finally块中这样做?通常使用“使用”语句会更好。 – 2008-11-26 15:29:34

+0

请发布相关代码... – tvanfosson 2008-11-26 15:30:00

4

我使用Sysinternals公司的工具来跟踪哪些应用程序访问文件,造成这种问题有很好的成功。

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

节省必须猜测问题是什么。

0

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

我写一个文本文件时,然后试图以后打开它得到了确切的同样的错误。

它被冲洗作家,然后写入文件后关闭它解决了..

1

尝试以下方法,你的文件流设置为Asynchronus模式(第三个参数)

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); 
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") 
相关问题