2017-09-09 1 views
0

J'ai des problèmes pour utiliser la fonction ftpUpload() de RCurl pour télécharger un fichier dans un dossier inexistant dans un SFTP. Je veux que le dossier soit fait s'il n'est pas là, en utilisant l'option ftp.create.missing.dirs. Voici mon code actuellement:Impossible de créer un dossier avec RCurl

.opts <- list(ftp.create.missing.dirs=TRUE) 

ftpUpload(what = "test.txt", 
to "sftp://ftp.testserver.com:22/newFolder/existingfile.txt", 
userpwd = paste(user, pwd, sep = ":"), .opts = opts)` 

Il ne semble pas fonctionner comme je l'obtiens l'erreur suivante:

* Initialized password authentication 
* Authentication complete 
* Failed to close libssh2 file 

Je peux télécharger un fichier dans un dossier existant avec succès, son juste au moment où la dossier n'est pas là, je reçois l'erreur.

Répondre

1

Le problème semble être dû au fait que vous essayez de créer le nouveau dossier, comme on le voit dans cette question: Create an remote directory using SFTP/RCurl

L'erreur se trouve dans Microsoft R Ouvrir la page git:

case SSH_SFTP_CLOSE: 
    if(sshc->sftp_handle) { 
    rc = libssh2_sftp_close(sshc->sftp_handle); 
    if(rc == LIBSSH2_ERROR_EAGAIN) { 
     break; 
    } 
    else if(rc < 0) { 
     infof(data, "Failed to close libssh2 file\n"); 
    } 
    sshc->sftp_handle = NULL; 
    } 
    if(sftp_scp) 
    Curl_safefree(sftp_scp->path); 

Dans le code le paramètre rc est lié à la fonction libssh2_sftp_close (plus d'informations ici https://www.libssh2.org/libssh2_sftp_close_handle.html), qui tente de fermer le répertoire inexistant, entraînant l'erreur.

Essayez utilisation curlPerform comme:

curlPerform(url="ftp.xxx.xxx.xxx.xxx/";, postquote="MkDir /newFolder/", userpwd="user:pass") 
+0

Un grand merci pour cela. Cela fait parfaitement sens. Savez-vous comment je peux simplement créer un dossier sur le SFTP avec 'RCurl' sans essayer de télécharger un fichier? Merci! – Freddie1

+0

Salut! J'ai ajouté une alternative possible, jetez un oeil. –

+1

Oui! Ça a marché. Cependant, je devais faire une petite modification pour le faire fonctionner avec 'R Studio'. Voici ma petite adaptation au cas où il serait utile à n'importe qui: 'curlPerform (url =" ftp.xxx.xxx.xxx.xxx.xxx/ ";, postquote =" MkDir/newFolder/", userpwd =" utilisateur: pass ")' Juste changé le 'MKD' à' MkDir' et 'quote' à' postquote', mais les principes de votre original encore intact! Merci encore une fois – Freddie1