我使用 C++ 和 libcurl 进行 SFTP/FTPS 传输。在上传文件之前,我需要在没有实际下载的情况下检查文件是否存在。
如果该文件不存在,我会遇到以下问题:
//set up curlhandle for the public/private keys and whatever else first.
curl_easy_setopt(CurlHandle, CURLOPT_URL, "sftp://user@pass:host/nonexistent-file");
curl_easy_setopt(CurlHandle, CURLOPT_NOBODY, 1);
curl_easy_setopt(CurlHandle, CURLOPT_FILETIME, 1);
int result = curl_easy_perform(CurlHandle);
//result is CURLE_OK, not CURLE_REMOTE_FILE_NOT_FOUND
//using curl_easy_getinfo to get the file time will return -1 for filetime, regardless
//if the file is there or not.
如果我不使用 CURLOPT_NOBODY,它会起作用,我会得到 CURLE_REMOTE_FILE_NOT_FOUND。
但是,如果文件确实存在,它会被下载,这对我来说是浪费时间,因为我只想知道它是否存在。
我还缺少任何其他技术/选项吗?请注意,它也应该适用于 ftps。
编辑: sftp 发生此错误。使用 FTPS/FTP,我得到了 CURLE_FTP_COULDNT_RETR_FILE,我可以使用它。