2016-04-05 68 views
0

我下載了一個像這樣的文件。移動下載的文件。另一個進程使用的IO異常文件

using (var client = new WebClient()) 
{ 
    client.Proxy = new WebProxy(); 
    client.DownloadFile(@tb.Text, "new.png"); 
} 

然後我想要移動它。

File.Move("new.png", path); 

我想這之後,我想...

using (var fileStream = new StreamReader("new.png")) 
{ 
    File.Move("new.png", path);   
} 

但兩個版本都扔文件使用由另一個進程的異常。 我該如何避免這種情況?

+5

哪裏是DownloadFile'和'File.Move之間'代碼'?下載完成後,只有通過'File.Move'得到異常的唯一方法是因爲該文件仍然可能被其他流打開了?有忘記發佈的代碼嗎?第二次嘗試*完全是*那 - 你希望如何移動一個你已經打開閱讀的文件?請發表*精確*代碼和*完整*異常由'Exception.ToString()' –

+0

返回我沒有做任何事情與文件。我只想下載它和移動/重命名。 – Jonas

+0

@Panagiotis在問什麼,是在你的代碼中你調用'File.Move()'的地方。顯示[mcve]。無論如何,你可以在網上搜索「另一個進程使用的C#文件」,並找到很多提示來幫助你解決這個問題。有些工具可以顯示哪個進程在文件上存在鎖定。例如,它可能是病毒掃描程序。 – CodeCaster

回答

-1
using (var fileStream = new StreamReader("new.png")) 
{ 
    File.Move("new.png", path);   
} 

爲什麼不就叫File.Move( 「new.png」,路徑)的使用

using (var fileStream = new StreamReader("new.png")) 
{ 
    // To your stuff 
} 
File.Move("new.png", path); 
+0

OP已經嘗試過。 – Pikoh

+0

@Pikoh OP可能還做了其他的事情,因爲在下載後調用'File.Move'不應該導致例外 –

+0

,而它適用於我。請分享你的「路徑」 –

1

你可以只下載的文件直接進入想要的路徑,這樣外面:

using (var client = new WebClient()) 
{ 
    client.Proxy = new WebProxy(); 
    client.DownloadFile(@tb.Text, Path.Combine(path, "new.png"); 
} 

這裏是Path.Combine(..)一些信息,如果你想吧:)

相關問題