J'ai besoin d'aide pour retravailler cette méthode de manière à ne pas créer une nouvelle session FTP pour chaque fichier téléchargé.FTP Webrequest Fichiers multiples sans session close
Les variables sont serveur (IP ou hostname) Dictionnaire (chemin de fichier local, chemin du serveur ftp) ex (c: /mydir/test.txt, \ entrant) PASV Utiliser le mode passif Vrai/Faux et la connexion/mot de passe pour le FTP lui-même
Je voudrais que cela fonctionne de telle manière.
1) Se connecter au serveur
2) Pour chaque fichier/paire de chemin dans le dictionnaire, télécharger le fichier
3) Se déconnecter du serveur
Est-il possible de réécrire cette méthode pour accomplir cela?
Aussi je sais que le try/catch devrait être mieux implémenté, j'aimerais avoir un try/catch block pour se connecter au FTP lui-même, puis un bloc try pour chaque fichier téléchargé mais j'ai besoin de trier la structure de la méthode en premier.
protected static bool FtpStart(string server, Dictionary<string, string> FilePath, bool PASV, string login, string password)
{
foreach (var Current in FilePath)
{
try
{
//FileInfo for Filename passed.
var ThisFile = new FileInfo(Current.Key);
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + server + Current.Value + ThisFile.Name);
request.UsePassive = PASV;
request.Method = WebRequestMethods.Ftp.UploadFile;
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential(login, password);
// Copy the contents of the file to the request stream.
StreamReader sourceStream = new StreamReader(Current.Key);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
response.Close();
}
catch (Exception Ex)
{
Console.WriteLine(Ex.Message);
return false;
}
}
return true;
}