2017-10-04 4 views
1

J'utilise la bibliothèque SSH.NET pour SFTP. J'ai besoin de télécharger un fichier dans deux dossiers sur le même serveur, mais le fichier sera grand, donc je préfère ne pas l'envoyer deux fois par le câble.Est-il possible de télécharger un fichier à deux dossiers SFTP sur le même serveur en même temps à partir de C#?

Existe-t-il une commande pour copier d'un dossier à l'autre une fois que les données sont sur le serveur? Ou peut-être télécharger en même temps sans avoir à envoyer deux copies des mêmes données sur le fil?

Répondre

1

Vous ne serez probablement pas en mesure de copier le fichier directement. Pour plus de détails pourquoi, voir:
In an SFTP session is it possible to copy one remote file to another location on same remote SFTP server?

Si vous avez un accès shell, vous pouvez bien sûr exécuter la commande cp à l'aide d'une session shell.
Voir How to run commands on SSH server in C#?


La seule façon de travailler de manière fiable pour dupliquer le fichier à distance via SFTP est de télécharger et re-télécharger le fichier.

La meilleure façon de le faire (sans créer un fichier local temporaire) est:

SftpClient client = new SftpClient("example.com", "username", "password"); 
client.Connect(); 

using (Stream sourceStream = client.OpenRead("/source/path/file.dat")) 
using (Stream destStream = client.Create("/dest/path/file.dat")) 
{ 
    sourceStream.CopyTo(destStream); 
} 

Mais je suis conscient que ce n'est pas ce que vous recherchez.

1

Vous pouvez utiliser quelque chose comme Powershell FileSystemWatcher pour surveiller les modifications dans l'un de vos dossiers. Puis, une fois qu'un nouveau fichier a été ajouté à ce dossier, vous pouvez déclencher une action (par exemple Robocopy) et copier le fichier dans l'autre dossier.