IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Transfert FTP de plusieurs fichiers


Sujet :

C#

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut Transfert FTP de plusieurs fichiers
    Bonjour

    J'ai besoin de transférer un répertoire contenant des sous répertoires et des fichiers sur des serveurs ftp SSL ou non.
    J'ai mis un bon moment avant de comprendre qu'il n'y a pas de solution miracle (comme C# nous y habitue) tel que UploadRepertoireEtDebrouilleToiDeTout(CheminduRepertoire,HostName,Login,password)
    et finalement j'ai réussi à transférer un fichier avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
            public async Task<string> UploadFile(String FilePath,String Login, String Pass, String HostName, int Port, bool SSL, bool ModePassif)
            {
                try
                {
                    var myUri = new Uri("ftp://" + HostName + "/macarte1/testftp.text"); // il faut que le répertoire existe !! 
                    var builder = new UriBuilder(myUri);
                    builder.Port = Port;
     
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(builder.Uri.ToString());
                    request.Method = WebRequestMethods.Ftp.UploadFile;
                    request.EnableSsl = (bool)SSL;
                    request.UsePassive = (bool)ModePassif;
                    request.KeepAlive = false;
     
                    SecureString securePwd = new SecureString();
                    securePwd = new NetworkCredential("", Pass).SecurePassword;
                    request.Credentials = new NetworkCredential(Login, securePwd);
     
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(myCertificateValidation);
     
                    string ReponseFTP = null;
     
                    StreamReader sourceStream = new StreamReader(FilePath);
                    byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                    sourceStream.Close();
     
                    request.ContentLength = fileContents.Length;
     
                    Stream requestStream = request.GetRequestStream();
                    await requestStream.WriteAsync(fileContents, 0, fileContents.Length);
                    requestStream.Close();
     
                    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                    ReponseFTP = response.StatusDescription;
                    response.Close();
     
                    return ReponseFTP;
     
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message.ToString(), "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    return "erreur!";
                }
    Partant de là il me faut trouver comment créer les répertoires (ça je devrais y arriver...) puis faire une routine récursive pour transférer tout mon répertoire et son contenu.

    Et là gros soucis : comment transférer plusieurs fichiers dans la même cession FTP ?
    Je vois bien comment (et je trouve pleins d'exemples) faire plusieurs write successifs mais comme le nom du fichier est défini au tout début dans le WebRequest.Create, je ne vois pas comment transférer un autre fichier sur le même serveur sans tout relancer. Or sur un serveur SSL le temps de connexion est très loin d'être négligeable...

    Merci par avance pour vos lumières
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    euh je viens d’avoir une lumière

    ce n'est quand même pas juste le keep alive ?

    ..je teste !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bonjour

    tu vas sur codeplex, et tu recherches ftp et tu trouveras plein de librairie qui proposent la fonctionnalité de transfert de répertoires récursifs !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Bonjour

    Je serai bien parti sur une lib toute faite (j'avais repéré celle ci https://netftp.codeplex.com/) mais dans tous les posts récents sur les forums que j'ai trouvé, ceux qui utilisaient ça se faisaient gronder comme quoi ils utilisaient un machin tierce alors que le framework offrait tout ce qu'il faut déjà... et je me suis dit que c'était pour cela que le truc n'est plus suivi sur codeplex (juin 2014).

    S'il y a une lib toute fait qui n'est pas has been je suis preneur avec le plus grand des plaisirs.

    Merci

    PS : c’était bien le keepalive. Je trouve très étonnant (pour ne pas dire pas logique) que l'on n'ait pas de notion de connexion dans la classe FtpWeb mais c'est bien le keepalive qui fait que la connexion reste active.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Bonjour

    J'arrive à faire des choses qui tombent en marche mais j'use pas mal le soleil... et il faut que j’arrête de martyriser les diptères !
    Auriez vous des librairies à me conseiller, y compris parmi le payantes (à pas trop cher ) ?

    J'ai besoin de transférer le contenu d'un répertoire sur des serveurs FTP ou FTPS et de m'assurer que les fichiers transférés sont parfaitement sains.

    J'aurais ensuite un autre besoin qui consiste à lister le contenu d'un répertoire puis d'aller chercher des fichiers de la liste, le tout sans avoir à refaire les connexions au serveur (cas du FTPS surtout)

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bonjour

    https://sourceforge.net/projects/dotnetftplib/

    Fonctionne très bien et me rend de grands services
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Merci, c'est une grand info de savoir qu'une lib marche bien !

    Mais je vois qu'elle n'est pas suivie depuis 2012, ça fonctionnera toujours dans une futur proche et moins proche ?
    C'etait la lib System.Net.FtpClient que j'avais vu qualifiée de has been (qu'il fallait utiliser FtpWebRequest... de VS. je ne retrouve pas le poste mais je jurerais que c’était tomLev qui grondait quelqu'un à ce sujet. or La lib System.Net.FtpClient a sa dernière version en 2015.

    Je m'inquiète de la date de mise à jour mais je la préfère quand même à priori à la lib System.Net.FtpClient que je ne comprends pas bien et qui semble aussi compliquée à utiliser que la class VS (pas de récursif, pas de création automatique d'un répertoire manquant...ou alors je ne comprends rien aux exemples)
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  8. #8
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    https://sourceforge.net/projects/dotnetftplib/ ne supporte pas le ssl apparemment

    la démo fonctionne sur un serveur ftp simple mais l'upload échoue à toutes les tentatives sur un FTP SSL :-(
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  9. #9
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    une liste à étudier peut-être ici : http://www.sftp.net/client-libraries
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  10. #10
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Bonjour

    Merci mais là ça parle que de SFTP, pas de FTPS
    SFTP c'est du SSH, rien à voir avec le FTPS (FTP avec SSL)

    ou alors j'ai pas compris ce que j'ai lu sur ce lien.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  11. #11
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Si vraiment tu veux faire du FTP / SSL, tu as cette librairie (payante) qui le fait...

    http://www.rebex.net/ftp-ssl.net/purchase.aspx

    Au moins, tu as une solution, certes payante, mais tu as au moins une possibilité
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  12. #12
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Merci

    c'est une solution en effet.

    Ceci dit ce matin je viens de me rendre compte d'une grande logique dans les erreurs que j'avais avec FtpWebRequest.

    Je remplissais mon buffer de byte avec une conversion ASCII or j'ai des fichiers binaires dans mon affaire et c'est eux uniquement qui posaient problème (je ne regardais pas les autres qui vont en fait très bien)
    un Petit GetAllByte(FileName) m'a permis d'avoir un truc qui semble très bien fonctionner ! je croise les doigts.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

Discussions similaires

  1. Indy FTP transfert de plusieurs fichiers
    Par zarbouine dans le forum Web & réseau
    Réponses: 1
    Dernier message: 01/07/2016, 10h32
  2. Réponses: 3
    Dernier message: 12/11/2012, 16h05
  3. Transfert FTP automatisé sans fichier script.txt
    Par RaphTIM dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 05/09/2007, 21h16
  4. Réponses: 2
    Dernier message: 21/06/2005, 21h18
  5. Transfert FTP répétitif et perte de fichiers
    Par Harry dans le forum Développement
    Réponses: 3
    Dernier message: 24/06/2004, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo