2011-01-24 4 views
3

РЕШИТЬ ...Libcurl SFTP Rename файл

После более смещается вокруг, с помощью «переименовать» в кавычках команды, то требуется полный путь включительно оригинального названия и полного пути инклюзивного переименовани до места назначения. Я не пробовал путь в моих других разочарованных попытках.


Привет всем, Я пробовал все разные комбинации, продолжаю терпеть неудачу и не знаю, что мне не хватает. Я пытаюсь сделать простое переименование файла на SFTP-сайте с помощью Libcurl. Я искал ответы на все вопросы, но продолжаю приходить в себя.

BTW ... Для этого тестирования в папке есть только одно имя файла, поэтому проблема с существующим файлом не перезаписывается ... И я являюсь пользователем входа, который изначально загрузил файл для любых возможных «разрешений», вопросы.

Мой первый тест состоял в том, чтобы получить то, что можно было бы ожидать как простой синтаксис, но в противном случае. Сначала я начал с сайта NON-SFTP ... просто обычный FTP.

// ex: fpt://mysite.com/subpathNeeded/ 
curl_easy_setopt(MyCurl, CURLOPT_URL, RemotePath); 


// need a "QUOTE" command before rename will occur in postQuote 
strcpy_s(NewCmd, _countof(NewCmd), "PWD \0"); 
quotelist = curl_slist_append(quotelist, NewCmd); 

// NOW, we can issue the rename from and rename to commands 
strcpy_s(RenameFrom, _countof(RenameFrom), "RNFR "); 
strcat_s(RenameFrom, _countof(RenameFrom), RemoteCurrentFileName); 
postquotelist = curl_slist_append(postquotelist, RenameFrom); 

strcpy_s(RenameTo, _countof(RenameTo), "RNTO "); 
strcat_s(RenameTo, _countof(RenameTo), RemoteRenameToName); 
postquotelist = curl_slist_append(postquotelist, RenameTo); 

curl_easy_setopt(MyCurl, CURLOPT_QUOTE, quotelist); 
curl_easy_setopt(MyCurl, CURLOPT_POSTQUOTE, postquotelist); 

// NOW, perform the print working directory, then rename... 
MyCurlResult = curl_easy_perform(MyCurl); 

Это не проблема. Итак, теперь я переключаюсь на SFTP, и это терпит неудачу ... По результатам исследования SFTP не любит «PWD», но позволяет «pwd» (case issue), без проблем. Затем ему не нравятся RNFR и RNTO, но он принимает «mv» (перемещение). Так что, если я нахожусь в режиме SFTP, я изменяю

// lower case "pwd" print working directory 
strcpy_s(NewCmd, _countof(NewCmd), "pwd\0"); 
quotelist = curl_slist_append(quotelist, NewCmd); 

// "mv" = move "originalfile" "newfile" 
strcpy_s(RenameFrom, _countof(RenameFrom), "mv \"\0"); 
strcat_s(RenameFrom, _countof(RenameFrom), RemoteCurrentFileName); 
strcat_s(RenameFrom, _countof(RenameFrom), "\" \"\0"); 
strcat_s(RenameFrom, _countof(RenameFrom), RemoteRenameToName); 
strcat_s(RenameFrom, _countof(RenameFrom), "\"\0"); 
postquotelist = curl_slist_append(postquotelist, RenameFrom); 

тогда я получаю CURL ошибку, когда я выполняю это ...

Однако, если я не попробовать команду «MV» и отправляйте только команду QUOTE из «pwd», она проходит через штраф, и она правильно перечисляет ожидаемую папку/подкаталог, в который я пытаюсь переименовать файл. Поэтому я знаю его в соответствующем каталоге. Значения, которые у меня есть в «RemoteCurrentFileName» и «RemoteRenameToName», являются только строками файла, без полного пути к ним. Я также попытался включить полный путь, и обе версии не работают. Пример:

RemoteCurrentFileName = "FileIWantToRename.txt" 
    or 
RemoteCurrentFileName = "/subpathNeeded/FileIWantToRename.txt" 

Кроме того, я посмотрел на документацию и отметил, что «переименовать» является действительным команда «QUOTE» и пытался это тоже ..

rename "original file" "new file" 

и что тоже не получилось

Это не должно быть так сложно. Чего простого/глупого я пропускаю ... Это совершенно расстраивает.

ответ

1

РЕШИТЬ ...

После более смещается вокруг, с помощью «переименовать» в кавычках команды, то требуется полный путь включительно оригинального названия и полного пути инклюзивного переименовани до места назначения. Я не пробовал путь в моих других разочарованных попытках

strcpy_s(RenameFrom, _countof(RenameFrom), "rename \"\0"); 
strcat_s(RenameFrom, _countof(RenameFrom), RemoteCurrentFileNameWithFullPath); 
strcat_s(RenameFrom, _countof(RenameFrom), "\" \"\0"); 
strcat_s(RenameFrom, _countof(RenameFrom), RemoteRenameToNameWithFullPath); 
strcat_s(RenameFrom, _countof(RenameFrom), "\"\0"); 
quotelist = curl_slist_append(quotelist, RenameFrom); 

MyCurlResult = curl_easy_perform(MyCurl); 
+0

Это странно, я тестировал как по абсолютной траектории, так и по относительной траектории, и она отлично работала. В случае относительного пути единственной командой POSTQUOTE, которую я использовал, было: 'rename ./my_sftp_path/file_original.foo./My_sftp_path/file_renamed.foo' – cesargastonec