解決...libcurl的SFTP重命名文件
更多轉向周圍,通過使用「重命名」所引用的命令後,它需要的完整路徑,包括原來的全路徑名和包容性的命名,到目的地的。在我的其他挫折嘗試中,我沒有嘗試過這條路。大家好,我嘗試過所有不同的組合,不斷失敗,不知道我失蹤了。我正在嘗試使用Libcurl在SFTP站點上進行簡單的文件重命名。我已經找遍了所有的答案,但不斷地提出來。
BTW ......對於這個測試,有文件夾中只有一個文件名,所以沒有對現有文件的問題覆蓋......而我是誰最初上傳文件的任何可能的「權限」登錄用戶的問題。
我的第一個測試是讓這將是預期的那樣簡單的語法正確,但是沒有結果。我從一個非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」命令只發送的「PWD」的QUOTE命令,它會通過罰款,它不正確列出預期的文件夾/子目錄我試圖重命名文件,所以我知道它在正確的目錄。我曾經在「RemoteCurrentFileName」和「RemoteRenameToName」的值僅僅是莖的文件,分別沒有完整路徑給他們。我也試過包括完整路徑,並且兩個版本都失敗了。例如:
RemoteCurrentFileName = "FileIWantToRename.txt"
or
RemoteCurrentFileName = "/subpathNeeded/FileIWantToRename.txt"
另外,我看了看文件,並指出「重命名」,是一個有效的「QUOTE」命令,並嘗試了太..
rename "original file" "new file"
和失敗過於
這不應該很難做到。我錯過了多少簡單/愚蠢......這完全令人沮喪。
這很奇怪,我測試了絕對路徑和相對路徑,它工作得很好。在相對路徑的情況下,我使用的唯一的POSTQUOTE命令是:`重命名./my_sftp_path/file_original.foo。/ my_sftp_path/file_renamed.foo` – cesargastonec 2015-03-06 20:39:25