2015-01-01 3 views
0

Я использую сборку WinSCP .NET для передачи файлов с Windows на сервер Unix (в основном файлы .doc). Иногда файл передается как пустой документ. Но источник пришел в него. Я не могу пойти на синхронизацию на уровне каталогов, потому что переношу документы на сервер Unix с разных клиентских машин. Я использую следующий код:Сравните файл после передачи с помощью сборки WinSCP .NET

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(); 
} 

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

ответ

0

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

Полный пример см. В разделе Verify checksum of a remote file against a local file over SFTP/FTP protocol (он находится в PowerShell, но его следует легко перевести на C#).

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


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

+0

Спасибо за ваше предложение martin. позвольте мне попробовать и сообщить вам, в первую очередь, FTP не терпит неудачу, файл успешно загружен без каких-либо исключений, но в нем нет содержимого. – Suressh