2014-11-26 2 views
1

Я пытаюсь разработать простой файл SFTP перенося проект с помощью следующих операцийУдалить или переместить только выбранные файлы с протоколом SFTP с помощью WinSCP сборки .NET

  1. Загрузить
  2. Скачать
  3. Перемещение файлов в пределах удаленный сервер
  4. Удалить файлы

при загрузке в session.PutFiles() мы имеем свойство са lled transferOptions.FileMask для фильтрации файлов.

Но я не видел ничего подобного в session.MoveFile() и в session.RemoveFiles()

Мой вопрос: что я должен делать, если мне нужно, чтобы переместить/удалить только выбранные файлы?

+0

@MartinPrikryl не на одном снимке. Мне просто нужно делать операции только в выбранных файлах – user2435880

ответ

2

Session.RemoveFiles принимает file mask.

Так что вы можете сделать:

session.RemoveFiles("/home/user/*.txt"); 

Это так же, как с Session.PutFiles. TransferOptions.FileMask на самом деле предназначен для расширенного выбора, например, когда вы хотите рекурсивно выбирать файлы или когда хотите исключить определенные типы файлов.

session.PutFiles(@"c:\toupload\*.txt", "/home/user/"); 

С TransferOption.FileMask, WinSCP будет загружать все соответствующие файлы рекурсивно. Хотя с простой файловой маской в ​​качестве аргумента .PutFiles, она не рекурсивна.


Session.MoveFile фактически поддерживает маску файла в качестве первого аргумента тоже , хотя это не документировано.

Правильный способ - указать список удаленных каталогов, выбрать нужные файлы и вызвать Session.MoveFile для каждого.

См. Listing files matching wildcard. Это пример PowerShell, но сопоставление его с C# должно быть легким.

+0

спасибо Мартин ... я попробую и дам вам знать – user2435880

+0

Спасибо за помощь @MartinPrikryl Удаление файлов работает отлично. Но при перемещении исключений исключается session.MoveFile ("/ upload/Folder1", "/ upload/Folder1/Archive"); – user2435880

+0

Эта команда не имеет смысла, вы перемещаете папку в свою собственную подпапку, это невозможно. Я предполагаю, что вы действительно хотели перенести файлы из этой папки (а не самой папки) в свою подпапку. Это будет 'session.MoveFile ("/upload/Folder1/* ","/upload/Folder1/Archive/")' (обратите внимание на завершающую косую черту). Хотя это и попыталось бы переместить папку «Архив» в себя, и это снова потерпит неудачу. Если вы можете выбрать файлы с помощью расширения, чтобы отличать их от папки, сделайте это. Если нет, вы должны использовать решение, предложенное в моем ответе. –

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

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