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 :

C# - Gestion FTP et création Fichier de variables globales


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut C# - Gestion FTP et création Fichier de variables globales
    Bonjour,

    j'ai un projet à réaliser en C#, sous Microsoft Visual C# 2010 Express.
    Le but de ce projet est de venir scruter dans un répertoire préçis, l'arrivée de fichiers, et lorsqu'ils sont là, les récupérer, et les envoyer à d'autres "endroits", avec une temporisation bien préçise.

    J'ai plusieurs question :

    1) Comment ajouter un fichier variable.cs, qui contiendrait toutes mes variables globales du projet ?

    2) Comment gérer le fait de récupérer les fichiers dans un répertoire, et ensuite les envoyer dans un autre, via FTP(s) ?

    3) Comment lire à l'intérieur d'un fichier en C#, pour par exemple, venir lire dans la ligne 18, l'horodate du fichier (ou autre).


    Merci beaucoup d'avance..
    Très cordialement, Benjamin

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Citation Envoyé par benobab Voir le message
    1) Comment ajouter un fichier variable.cs, qui contiendrait toutes mes variables globales du projet ?
    Pour un tel fichier , une simple classe statique suffit , dont les attributs seront aussi statique , attention toutefois a ne pas en abuser pour y fourrer un peu tout et n'importe quoi.

    Citation Envoyé par benobab Voir le message
    2) Comment gérer le fait de récupérer les fichiers dans un répertoire, et ensuite les envoyer dans un autre, via FTP(s) ?
    Tu veux dire par la , les déplacer au sein d'un FTP ?

    Citation Envoyé par benobab Voir le message
    3) Comment lire à l'intérieur d'un fichier en C#, pour par exemple, venir lire dans la ligne 18, l'horodate du fichier (ou autre).
    Je ne vois pas trop ce que tu veux faire précisement ici.

  3. #3
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    D'accord merci.


    Hum j'aimerais pouvoir récupérer des fichiers dans un répertoire oui, et les envoyer sur un serveur FTP, avec des fonctions simples si possibles.

    Je me suis mal exprimé en effet, je voudrais lire dans un fichier text par exemple, et j'ai trouvé avec System.IO -> StreamWriter et StreamRider, mais est-ce qu'il en existe une autre, mieux ?

    Merci de la réponse en tout cas

  4. #4
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Pour uploader un fichier simplement , il suffit de cette méthode , avec les options a remplir selon ton cas (host / user / pass)

    fichierLocal est le nom de ton fichier sur ton pc , et fichierServeur le nom qu'aura le fichier une fois uploadé

    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
    FtpWebRequest ftpRequest = null;
            Stream ftpStream = null;
            int bufferSize = 2048;
            string host = "ftp://monftp";
            string user = "user";
            string pass = "password";
     
            public void Upload(string fichierLocal, string fichierServeur)
            {
                ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + fichierServeur);
                ftpRequest.Credentials = new NetworkCredential(user, pass);
                // Options
                ftpRequest.UseBinary = true;
                ftpRequest.UsePassive = true;
                ftpRequest.KeepAlive = true;
                ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
                ftpStream = ftpRequest.GetRequestStream();
                FileStream localFileStream = new FileStream(fichierLocal, FileMode.Create);
                byte[] byteBuffer = new byte[bufferSize];
                // On écris dans le fichier
                int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
     
                try
                {
                    while (bytesSent != 0)
                    {
                        ftpStream.Write(byteBuffer, 0, bytesSent);
                        bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
                    }
                }
                catch (Exception ex) { Console.WriteLine(ex.ToString()); }
     
                localFileStream.Close();
                ftpStream.Close();
                ftpRequest = null;
            }
    Pour utiliser ce code , pour upload tout un dossier tu peux parcourir ce dernier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
               string[] fichiers = Directory.GetFiles("C:\\TonDossier");
     
               foreach (string str in fichiers)
               {
                    Upload(str, Path.GetFileName(str));
               }
    Attention cependant , cette méthode est bloquante , donc elle uploade les fichiers un par un.

    Sinon StreamReader / StreamWriter conviennent très bien pour faire ce qu'il te faut.

  5. #5
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    Ok merci, ta réponse était super clair !

    Par contre concernant le premier bout de code :

    FTPWebRequest correspond à quoi ? Enfin, faut-il peut-être ajouter une librairie ?

    Sinon j'ai une autre question, comment temporiser cet envoie FTP, par exemple, un toutes les 2 secondes, mais de façon précise, c'est à dire :
    ne pas en envoyer un, 2 seconde après que le deuxième soit envoyé, mais l'envoyer 2 seconde après le début d'envoie de ce fichier là. Sans prendre en compte le temps d'envoie en fait. (Désolé si je me suis un peu embrouillé)

  6. #6
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Dans ce cas il te faudrait remplacer ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                    while (bytesSent != 0)
                    {
                        ftpStream.BeginWrite(byteBuffer, 0, bufferSize, null, null);
                        ftpStream.Write(byteBuffer, 0, bytesSent);
                        bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
                    }
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        ftpStream.BeginWrite(byteBuffer, 0, bufferSize, null, fichierLocal);
    Pour les arguments de cette méthode je ne suis pas du tout sur pour les 2 derniers , je te conseille de faire un tour par ici : http://msdn.microsoft.com/fr-fr/libr...vs.110%29.aspx

    Avec ce code , tu lances l'upload sans te soucier que ce soit finit ou non.Pour temporiser la chose , tu mets un Timer , avec un tick a 2 secondes , et dans ce tick , tu mets un petit compteur i qui te permettra d'arrêter ton Timer une fois tous les fichiers traités.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
             // Code a executé toute les 2 secondes  
               string[] fichiers = Directory.GetFiles("C:\\fichiers");
               Upload(fichiers[i], Path.GetFileName(fichiers[i]));
               i++;
               if (i == fichiers.Length)
               {
                   // Arrête le timer ici 
               }

  7. #7
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    Oui, en fait j'avais oublié d'écrire using System.Net;.

    Mais ma problématique serait en fait de tout faire "d'un seul coup", sans étape intermédiaire. Donc de prendre un fichier d'un serveur FTP, et de l'envoyer vers un autre serveur FTP, dans la même fonction. Est-ce possible ? Résolu : J'installe mon application directement dans la seconde VM...

    Par contre, comment lire dans le fichier et m'arrêter lorsque je trouve le mot "MOT" par exemple, et ensuite prendre les 5 caractères et les concaténer dans une chaine de caractère, avec StreamReader ?

    Merci

  8. #8
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Citation Envoyé par benobab Voir le message

    Mais ma problématique serait en fait de tout faire "d'un seul coup", sans étape intermédiaire. Donc de prendre un fichier d'un serveur FTP, et de l'envoyer vers un autre serveur FTP, dans la même fonction. Est-ce possible ?

    Merci
    Il faut que les 2 FTP ( a ce que j'ai pu lire) supportent le mode FXP ,qui autorise le transfert inter-FTP , et que ton programme envoie donc des commandes aux FTP pour effectuer l'échange. Je ne connais absolument pas FXP donc je ne pourrais pas t'aider la dessus.

    Sinon si ce sont des fichiers assez légers , passer par le PC ne serait pas trop gênant.

  9. #9
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    D'accord oui je vais me renseigner ça peut être la solution, et concernant la reconnaissance de mot dans un fichier et l'enregistrement d'un certains nombre de caractères suivant de mot, aurais tu une idée ? (voir mon message précédent si je ne suis pas assez explicite)

  10. #10
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    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
           StreamReader reader = new StreamReader("C:\\tonfichier.txt");
            string mot = "MOT";
     
            public string GetMot()
            {
                string ligne;
                string resultat = "";
                while ((ligne = reader.ReadLine()) != null)
                {
                    if (ligne.Contains(mot))
                    {
                        resultat = ligne.Substring(ligne.IndexOf(mot) + mot.Length, 5);
                    }
                }
                return resultat;
            }
    C'est assez simple , StreamReader permet de tout faire un peu tout et n'importe quoi , maintenant a toi de voir si tu veux que la recherche respecte la case , etc .

  11. #11
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut


    Merci beaucoup, ça fonctionne nickel !

    Finalement j'ai opté pour ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                if (File.Exists(path_ini)) // on vérifier que le fichier existe
                {
                    StreamReader param = new StreamReader(@path_ini);
                    string line;
                    while((line = param.ReadLine()) != null) // on lit toutes les lignes
                    {
                        Match mat = Regex.Match(line, @"(mot)"); //on recherche la ligne qui commence par "mot"
                        if (mat.Success) 
                        {
                            string[] parametre = line.Split(); // met la ligne dans un tableau d'argument ex bla blo blu est divisé en 3 cases de ce tableau de caractère :paramètre
                            label11.Text = parametre[2]; // récupere le troisieme parametre de la chaine ex : blu
                        }
                    } 
                }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/08/2012, 11h05
  2. création d'une variable globale
    Par TaymouWan dans le forum C#
    Réponses: 7
    Dernier message: 03/04/2009, 17h13
  3. Réponses: 3
    Dernier message: 20/01/2007, 20h36
  4. [FTP] Probleme de droits création fichier
    Par kahya dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 10h03
  5. [ FICHIER ENTETE ] Variables globales
    Par zymooo dans le forum MFC
    Réponses: 2
    Dernier message: 04/02/2006, 20h08

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