Сравните файл после передачи с использованием сборки WinSCP .NET

Я использую сборку 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();
}

Есть ли способ проверить, синхронизирован ли переданный файл с исходным файлом?


person Suressh    schedule 01.01.2015    source источник


Ответы (1)


При соответствующей поддержке на сервере вы можете использовать Session.CalculateFileChecksum для подсчета контрольной суммы загруженного файла. . Сравните это с контрольной суммой исходного файла, чтобы убедиться, что загрузка прошла успешно.

Полный пример см. в разделе Проверка контрольной суммы удаленного файла относительно локального файла по протоколу SFTP/FTP (это в PowerShell, но его легко перевести на C#).

Хотя правильным решением было бы выяснить, почему в первую очередь происходит сбой загрузки.


Не используйте метод .Abort(), кроме как в исключительной ситуации. Также нет смысла использовать .Dispose(), так как вы находитесь в конце блока using, который неявно вызывает .Dispose().

person Martin Prikryl    schedule 05.01.2015
comment
Спасибо за ваше предложение Мартин. позвольте мне попробовать и сообщить вам, во-первых, FTP не дает сбоев, файл был успешно загружен без каких-либо исключений, но в нем нет содержимого. - person Suressh; 05.01.2015