libcurl で C++ を使用して 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 を取得できます。