2013-04-20 147 views
0

我試圖複製一些文件:System.IO.File.Copy拋出IOException異常

private void DoCopy() { 
    string[] files = Directory.GetFiles(Application.StartupPath + "\\App_Data", "*.*", SearchOption.AllDirectories); 

    string sFtpToReadFileFrom = "ftp://<user>:<pass>@mysite.tk/updates/App_Data/"; 
    string sPathToWriteFileTo = Application.StartupPath + "\\App_Data"; 

    WebClient webClient = new WebClient(); 
    webClient.Credentials = new NetworkCredential("user", "pass"); 

    foreach (string s in files) 
    { 
     string fileName = Path.GetFileName(s); 
     string destFile = Path.Combine(sPathToWriteFileTo, fileName); 
     byte[] fileData = webClient.DownloadData(sFtpToReadFileFrom + fileName); //shows correct bytes 

     File.Copy(s, destFile, true); 
    } 
} 

確切的錯誤是:該進程無法訪問文件「C:\ AppLauncher \ AppLauncher \ BIN \調試\ App_Data \ firstFile',因爲它正在被另一個進程使用。

我跟着「MSDN如何」在這裏:http://msdn.microsoft.com/en-us/library/cc148994.aspx

如有任何直接的紅旗,請不要讓我知道。

+0

第一個文件應該是什麼? – 2013-04-20 05:21:36

+0

當我點擊屬性時,它只是說文件 – avidprogrammer 2013-04-20 05:24:14

+0

我很難理解你的代碼...請解釋你正在嘗試做什麼。 – 2013-04-20 05:25:16

回答

0

這就是我看待它:

您希望從FTP服務器上下載文件,並將其寫入到本地磁盤。 你正在做的是將源目錄中的文件作爲目標,這根本不起作用。如果文件已經存在,那麼他們可以在那裏獲取文件名。 (因此除外)

這裏是你必須做的

連接到FTP,那裏獲取文件(其字節),然後在磁盤上創建文件。

private void DoCopy() { 
    //string[] files = Directory.GetFiles(Application.StartupPath + "\\App_Data", "*.*", SearchOption.AllDirectories); 

    //Acquire filenames from FTP-Server instead of local disk! 

    string sFtpToReadFileFrom = "ftp://<user>:<pass>@mysite.tk/updates/App_Data/"; 
    string sPathToWriteFileTo = Application.StartupPath + "\\App_Data"; 

    WebClient webClient = new WebClient(); 
    webClient.Credentials = new NetworkCredential("user", "pass"); 

    foreach (string s in files) 
    { 
     string fileName = Path.GetFileName(s); //create file names based on FTP-server 
     string destFile = Path.Combine(sPathToWriteFileTo, fileName); 
     byte[] fileData = webClient.DownloadData(sFtpToReadFileFrom + fileName); //shows correct bytes 

     //File.Copy(s, destFile, true); Rather use File.WriteAllBytes 
     File.WriteAllBytes(destFile, fileData); 
    } 
} 

用於File.WriteAllBytes一個例子見here

從FTP文件名的獲取不是那麼簡單,雖然。 FtpWebRequest -class支持你。

+0

謝謝。我需要更新文件,它們都是相同的名稱,但文件大小不同(已更新)。 – avidprogrammer 2013-04-20 05:38:20

+0

我剛下載它,它顯示正確的字節,它爲什麼不復制? :( – avidprogrammer 2013-04-20 05:39:25

+0

你不能用'File.Copy'來更新它們,當目標存在時它會拋出一個System.IOException,或者在使用'File.Copy'之前刪除文件或者我提供的方法。 – 2013-04-20 05:45:43