0

いくつかのファイルをコピーしようとしています:

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

誰かが緊急の危険信号を見つけたら、私に知らせてください。

4

1 に答える 1

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

ただし、FTP からファイル名を取得するのはそれほど簡単ではありません。FtpWebRequestあなたをサポートするクラスがあります。

于 2013-04-20T05:36:01.387 に答える