使用 WinSCP .NET 程序集在传输后比较文件

本文关键字:比较 文件 传输 WinSCP NET 程序集 使用 | 更新日期: 2023-09-27 18:35:53

我正在使用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();
}

有没有办法检查传输的文件是否与源文件同步?

使用 WinSCP .NET 程序集在传输后比较文件

在服务器上的适当支持下,您可以使用Session.CalculateFileChecksum来计算上传文件的校验和。将其与源文件的校验和进行比较,以验证上传是否成功。

有关完整示例,请参阅通过 SFTP/FTP 协议验证远程文件的校验和与本地文件(它位于 PowerShell 中,但将其转换为 C# 应该很容易)。

虽然正确的解决方案是找出,但为什么首先上传失败。


除非在特殊情况下,否则不要使用 .Abort() 方法。也没有意义或使用 .Dispose() ,因为您位于隐式调用.Dispose()using块的末尾。