РЕШИТЬ ...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"
и что тоже не получилось
Это не должно быть так сложно. Чего простого/глупого я пропускаю ... Это совершенно расстраивает.
Это странно, я тестировал как по абсолютной траектории, так и по относительной траектории, и она отлично работала. В случае относительного пути единственной командой POSTQUOTE, которую я использовал, было: 'rename ./my_sftp_path/file_original.foo./My_sftp_path/file_renamed.foo' – cesargastonec