2014-11-20 5 views
4

Я создаю небольшое .NET-приложение на C# для загрузки файлов на FTP-сервер. Я использую .NET DLL для WinSCP, делая это, и я пытался найти хорошее решение для своей проблемы.Загрузка файла с помощью WinSCP .NET/COM с временными именами файлов

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

Так что я хочу, чтобы мои файлы были захвачены приложением до завершения передачи.

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

Что вы предлагаете как лучший подход? И второй вопрос: в WinSCP .NET должна быть опция Transfer Resume, которая передает файл с временным именем и переименовывает по завершении. Но я не могу заставить это работать и ищет какие-либо намеки на то, как заставить это работать?

+0

Является ли другое приложение для поиска определенного шаблона имен? Кого можно избежать при загрузке. –

+0

Да, 5-6 разных типов файлов –

+0

Вы просматривали событие Session.FileTransferred? –

ответ

3

Вы правы, что функция "transfer to temporary file name" WinSCP выглядит как способ.

Он делает файл загрузки WinSCP с добавленным к его названию .filepart, удаляя расширение после его завершения.

TransferOptions transferOptions = new TransferOptions(); 
transferOptions.ResumeSupport.State = TransferResumeSupportState.On; 
session.PutFiles(@"d:\toupload\myfile.dat", "/home/user/", false, transferOptions).Check(); 

Хотя он поддерживается только протоколом SFTP.


С протоколом FTP вы должны сделать это вручную.

session.PutFiles(@"d:\toupload\myfile.dat", "/home/user/myfile.dat.filepart").Check(); 
session.MoveFile("/home/user/myfile.dat.filepart", "/home/user/myfile.dat"); 

Если вы загружаете несколько файлов, вы можете использовать operation mask, и список итерации успешно загруженные файлы, возвращенных Session.PutFiles в TransferOperationResult, называя Session.MoveFile для каждого.

TransferOperationResult transferResult; 
transferResult = session.PutFiles(@"d:\toupload\*.dat", "/home/user/*.filepart") 

// Throw on any error 
transferResult.Check(); 

// Rename uploaded files 
foreach (TransferEventArgs transfer in transferResult.Transfers) 
{ 
    string finalName = transfer.Destination.Replace(".filepart", ".dat"); 
    session.MoveFile(transfer.Destination, finalName); 
} 

Там также полный PowerShell пример в статье Locking files while uploading/Upload to temporary file name.


Смотрите также SFTP file lock mechanism (относится к FTP, а) для различных подходов к скрывающимся загружаемым файлам.

 Смежные вопросы

  • Нет связанных вопросов^_^