0

WinSCP .NET アセンブリを使用して、Windows から Unix サーバー (主に .doc ファイル) にファイルを転送しています。ファイルが空白のドキュメントとして転送されることがあります。しかし、ソースにはコンテンツが含まれています。ドキュメントを別のクライアント マシンから Unix サーバーに転送しているため、ディレクトリ レベルの同期を行うことができません。次のコードを使用しています。

SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = cls_appvars.Set_FTP_Host,
    UserName = cls_appvars.Set_FTP_User,
    Password = cls_appvars.Set_FTP_Password,
};

using (Session session = new Session())
{                   
    session.Open(sessionOptions);

    TransferOptions transferOptions = new TransferOptions();
    transferOptions.TransferMode = TransferMode.Binary;

    TransferOperationResult transferResult;

    transferResult = session.GetFiles(wordfilepath, downloadwordpath + ".tmp", false, transferOptions);

    System.IO.File.Move(downloadwordpath + ".tmp", downloadwordpath);

    transferResult.Check();   

    foreach (TransferEventArgs transfer in transferResult.Transfers)
    {
        System.IO.File.AppendAllText(path, System.DateTime.Now + "***func_download_file_individual() in scribeapp*** Download succeeded for file " + transfer.FileName + Environment.NewLine);
    }

    session.Abort();
    session.Dispose();
}

転送されたファイルがソース ファイルと同期されていることを確認する方法はありますか?

4

1 に答える 1

0

サーバーで適切なサポートがあれば、 を使用しSession.CalculateFileChecksumて、アップロードされたファイルのチェックサムを計算できます。それをソース ファイルのチェックサムと比較して、アップロードが成功したことを確認します。

完全な例については、「Verify checksum of a remote file against a local file over SFTP/FTP protocol 」を参照してください(これは PowerShell にありますが、C# に簡単に変換できるはずです)。

正しい解決策は見つけることですが、そもそもアップロードが失敗するのはなぜですか。


.Abort()例外的な状況でない限り、このメソッドを使用しないでください。また、暗黙的に を呼び出すブロック.Dispose()の最後にいるため、 を使用しても意味がありません。using.Dispose()

于 2015-01-05T09:56:15.150 に答える