System.IO.File.Copy引发IOException

时间:2013-04-20 05:14:41

标签: file copy

我正在尝试复制一些文件:

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 \ Debug \ App_Data \ firstFile',因为它正由另一个进程使用。

我在这里关注了'MSDN How To':http://msdn.microsoft.com/en-us/library/cc148994.aspx

如果有人发现任何即时危险信号,请告诉我。

1 个答案:

答案 0 :(得分: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 - 类来支持你。