Télécharger des fichiers à partir SFTP avec SSH.NET bibliothèque
string host = @"ftphost";
string username = "user";
string password = "********";
string localFileName = System.IO.Path.GetFileName(@"localfilename");
string remoteDirectory = "/export/";
using (var sftp = new SftpClient(host, username, password))
{
sftp.Connect();
var files = sftp.ListDirectory(remoteDirectory);
foreach (var file in files)
{
if (!file.Name.StartsWith("."))
{
string remoteFileName = file.Name;
if (file.LastWriteTime.Date == DateTime.Today)
Console.WriteLine(file.FullName);
File.OpenWrite(localFileName);
string sDir = @"localpath";
Stream file1 = File.OpenRead(remoteDirectory + file.Name);
sftp.DownloadFile(remoteDirectory, file1);
}
}
}
Je suis en utilisant SSH.NET (Renci.SshNet
) de la bibliothèque pour travailler avec un serveur SFTP. Ce que je dois faire, c'est prendre les fichiers d'un dossier spécifique sur le serveur SFTP basé sur la date d'aujourd'hui. Ensuite copier ces fichiers à partir du serveur SFTP sur un lecteur local un serveur de mine.
Ci-dessus est le code que j'ai, mais il ne fonctionne pas. Parfois, il dit que le fichier n'existe pas, mais parfois, les fichiers à télécharger ne sera pas sur mon local des serveurs, mais j'ai besoin de télécharger tous les fichiers ont été téléchargés sur le dossier distant pour cette journée.
Quelqu'un peut jeter un oeil et voir ce qui est mal? Je crois qu'il a quelque chose à voir avec le flux de la partie. J'ai travaillé avec FTP beaucoup en plus de télécharger les fichiers dont j'ai pris quelques code précédent, j'avais pensé et j'ai pu inverser le processus, mais qui ne fonctionne pas. Le code que j'ai utilisé est basé sur ce exemple.
- Dans mon cas, le code est en cours d'arrêt au moment de la connexion uniquement. Il dit
No Suitable authentication method found for authentication.
Vous devez vous connecter pour publier un commentaire.
Un simple code pour télécharger un fichier avec SSH.NET la bibliothèque est:
Voir aussi Le téléchargement d'un répertoire à l'aide de SSH.NET SFTP en C#.
Expliquer, pourquoi ton code ne fonctionne pas:
Le deuxième paramètre de
SftpClient.DownloadFile
est un flux d'écrire un contenu téléchargé à.Vous êtes de passage dans la lecture de flux au lieu d'écrire un ruisseau. Et d'ailleurs le chemin que vous êtes ouverture de lire les flux, est un chemin d'accès à distance, ce qui ne peut pas travailler avec
File
d'exploitation de classe sur des fichiers locaux.Juste jeter la
File.OpenRead
ligne et l'utilisation des résultats desFile.OpenWrite
appel à la place (que vous n'utilisez pas du tout):Ou mieux encore, utiliser
File.Create
à jeter tout le contenu du fichier local peut avoir.Je ne suis pas sûr si votre
localFileName
est supposé détenir chemin d'accès complet ou juste de nom de fichier. Vous devrez peut-être ajouter un chemin d'accès trop, si nécessaire (à combinerlocalFileName
avecsDir
?)var file1=File.OpenWrite(localFileName); sftp.DownloadFile(file.FullName, file1);
Tandis que l'exemple fonctionne, ce n'est pas la bonne façon de gérer les cours d'eau...
Vous devez vous assurer de la fermeture des fichiers/flux avec la à l'aide de clause..
Aussi, ajouter un try/catch pour gérer les erreurs d'e /s...
Ma version de @Merak Marey Code. Je vérifie si les fichiers existent déjà et de téléchargement différents répertoires .txt et d'autres fichiers
string ext = fi.Extension;
Et un interrupteur. Parce queLOVE-LETTER-FOR-YOU.TXT.vbs
va être un faux positif. ouPath.GetExtension(myFilePath);
Sans vous fournir aucun message d'erreur spécifique, il est difficile de donner des suggestions spécifiques.
Cependant, j'ai été en utilisant le même exemple et était en train de recevoir les autorisations d'exception sur le Fichier.OpenWrite - à l'aide de la localFileName variable, car l'utilisation du Chemin d'accès.GetFile a été pointant vers un emplacement qui n'aurait évidemment pas les autorisations pour l'ouverture d'un fichier > C:\ProgramFiles\IIS(Express)\filename.doc
J'ai trouvé que l'utilisation du Système.IO.Chemin d'accès.GetFileName n'est pas correct, l'utilisation du Système.IO.Chemin d'accès.GetFullPath au lieu de cela, le point de votre fichier commençant par "C:\..."
Également ouvrir votre solution dans FileExplorer et l'octroi d'autorisations pour asp.net pour les fichiers ou les dossiers qui détient le fichier. J'ai pu télécharger mon fichier.