решено ...
После еще большего перемещения, используя команду «переименовать» в качестве команды в кавычках, потребовался полный путь, включая исходное имя, и полный путь, включая переименование до места назначения. Я не пробовал с путем в других моих неудачных попытках.
Привет всем, я пробовал все разные комбинации, продолжаю терпеть неудачу и не знаю, что мне не хватает. Я пытаюсь сделать простое переименование файла на SFTP-сайте с помощью Libcurl. Я искал ответы повсюду, но продолжаю набирать обороты.
Кстати ... Для этого тестирования в папке есть только одно имя файла, поэтому никаких проблем с перезаписью существующих файлов ... И я являюсь пользователем, который первоначально загрузил файл для любых возможных проблем с "разрешениями" .
Мой первый тест состоял в том, чтобы получить то, что ожидалось, как правильный синтаксис, но результат был иным. Сначала я начал с 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" (проблема случая), никаких проблем. Затем он не любит 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 );
Затем я получаю ОШИБКУ СЕРБ, когда я выполняю это ...
Однако, если я не попробую команду "mv" и отправлю только команду QUOTE "pwd", она проходит нормально и правильно отображает ожидаемую папку / подкаталог, в котором я пытаюсь переименовать файл. Так что я знаю его в правильном каталоге. Значения, которые у меня есть в «RemoteCurrentFileName» и «RemoteRenameToName», являются только основами файла, а не полным путем к ним соответственно. Я также попытался включить полный путь, и обе версии потерпели неудачу. Пример:
RemoteCurrentFileName = "FileIWantToRename.txt"
or
RemoteCurrentFileName = "/subpathNeeded/FileIWantToRename.txt"
Кроме того, я просмотрел документацию и отметил, что «переименовать» является допустимой командой «QUOTE», и тоже попробовал это.
rename "original file" "new file"
и это тоже не удалось
Это не должно быть так сложно сделать. Какого простого / глупого мне не хватает ... Это очень расстраивает.