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 :

Deplacement de fichiers Txt avec manipulation avec copie


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Points : 64
    Points
    64
    Par défaut Deplacement de fichiers Txt avec manipulation avec copie
    Bonjour à tous,

    Je suis en train de développer un petit service Windows dont le but sera de déplacer des fichiers .txt à partir d'un dossier A qui sera alimenté de façon aléatoire.

    Toutes les X minutes, mon service va vérifier la présence de fichiers .txt dans le dossier A et si il y des fichiers de les manipuler ainsi:

    - lire le fichier d'origine ligne par ligne
    - extraire des info sur chacun ligne du fichier (système de champs) et les copier dans un nouveau fichier.
    - enregistrer le nouveau fichier dans le dossier B
    - deplacer le fichier d'origine du dossier A vers le dossier B
    - recommencer le procédure pour le fichier suivant dans le dossier A

    Comment aborder ce problème? le déplacement de fichier ne me pose pas de problème par contre:

    - plus compliqué pour la lecture du fichier ligne par ligne et l'extraction des infos interessante: en passant par un tableau intermediaire?
    - comme gérer la liste des fichiers à traiter dans le dossier A, surtout si de nouveaux fichiers .txt sont ajoutés alors que le service n'a pas fini de traiter les fichiers après les X minutes.

    J'espere avoir été clair.

    A l'avance merci pour votre aide

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    plusieurs possibilités mais ca peut ressembler à ca :

    démarrer un thread de vérification d'existence de fichier
    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
     
    void Verif()
    {
      while (true)
      {
        var files = system.io.directory.Getfiles(path, filtreOptionnel);
        if (files.count == 0) 
          {
            system.threading.thread.sleep(500); // pour revérification dans 500 ms, à faire varier selon ton critère d'urgence entre 5 et 5000 ms
            continue; // remonte au début du while
           }
     
        foreach (var filepath in files) // tous les fichiers présents vont être traités chacun leur tour, puis ca remonte au début et ca revérifie l'existence de fichier
          {
             traitement(filepath);
          }
      }
    }
    pour le traitement d'un fichier, il y a system.io.file.readalllines(path) qui te retourne un tableau de string, avec une ligne par string
    pour des gros fichiers (plusieurs dizaines de Mo) préférer un streamreader et lire ligne par ligne, ca prendra moins de ram

    pour découper un string il y a split, par exemple si une ligne contient "A=5" en splitant sur "=" tu obtiendra un nouveau tableau de string avec "A" et "5"

    system.io.file.appendalltext ou appendalllines pour rajouter du texte/des lignes dans un fichier existant


    il est aussi possible de multithreader la lecture des fichiers s'il y en a souvent plusieurs d'un coup, mais ca va compliquer le code s'ils doivent tous écrire dans le même au final (verrous ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  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
    pour l'aspect traitement, ya que toi qui peut vraiment savoir le contenu des informations et ce qu'il faut en faire pour l'instant !

    par contre, pour l'aspect timing.. ça dépend.

    Je suppose que tu as un timer dans ton service.

    Plusieurs options...

    La première serait: quand ton timer tombe, tu lances ta procédure de traitement et tu mets un booléen pour dire que le traitement est en cours
    SI le timer s'active de nouveau et que le traitement est encore en cours, tu ne fais rien (et du coup, tu attendras la prochaine fois pour faire le traitement) ==> c'est le
    mode le plus simple dans un premier temps.

    ensuite, dans le traitement, tu peux récupérer la liste des fichiers à traiter et ensuite, les traiter un par un. A la fin de ton traitement, si d'autres fichiers ont été crées,
    ils seront traités lors de la prochaine itération, et basta.

    De toute façon, si le traitement dure plus longtemps que l'interval de ton timer, c'est qu'il faut travailler sur l'amélioration du processus de traitement.
    Si chaque traitement est "assez" long, peut-être qu'il faut voir du coté des parallèles task pour voir si tu en tirerais un gain à les utiliser.
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    J'espère que tu utiliseras le contrôle FileSystemWatcher (Exemple du forum) pour être notifié de la création/modification/suppression de fichiers......

    Un projet intéressant ici : http://www.codeproject.com/Articles/...r-Windows-serv

    Breff..... :

    - plus compliqué pour la lecture du fichier ligne par ligne et l'extraction des infos interessante: en passant par un tableau intermediaire?
    Je ne vois pas ce qui te semble compliqué....o_O?? Déjà il serait judicieux de préciser quel est le format de ce fichier : délimité, balisé, ou autres..... un exemple de contenu n'aurait pas été du luxe si tu veux qu'on t'oriente ou qu'on te conforte dans l'idée que ça sera vraiment compliqué

    --> Lire un fichier ligne par ligne : On utilise la classe StreamReader et la méthode Readline tout simplement !

    --> Ecrire dans un fichier : On utilise la classe StreamWriter


    - comme gérer la liste des fichiers à traiter dans le dossier A, surtout si de nouveaux fichiers .txt sont ajoutés alors que le service n'a pas fini de traiter les fichiers après les X minutes.
    Pourquoi se soucier de cela..... lorsqu'un fichier sera traité tu mets à jour une liste à l'extérieur que tu interrogeras avant de traiter un quelconque fichier....

    Regardes toutes ces infos et reviens nous voir avec une ébauche et davantage d'éléments techniques si tu veux du soutien.

    ++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Points : 64
    Points
    64
    Par défaut
    Bonjour à tous,

    Merci pour vos pistes qui me seront d'une aide précieuse (pour info je suis néophyte en C#).

    Je vais tester le streamReader et je reviens vers vous.

    Pour l'instant j'appelle la procédure ci-dessous lorsque mon timer boucle:

    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
     
    private void MoveFiles()
            {
                NetworkShare.ConnectToShare(@"" + SourcePath, SourceLogin, SourcePassword);
                    try
                    {
                        Thread.Sleep(1000);
                        String[] files = Directory.GetFiles(SourcePath + "\\", "*" + FileType, SearchOption.TopDirectoryOnly);
                        foreach (String file in files)
                        {
                            //
                            // inclure ici la procédure pour lecture et traitement ligne par ligne du fichier
                            //
                            File.Move(file, DestPath + "\\" + new FileInfo(file).Name); // Une fois le fichier traité, deplacer l'original vers le dossier de destination
                            Library.WriteErrorLog(new FileInfo(file).Name.ToString() + " déplacé vers " + DestPath);
                        }
                    }
                    catch (Exception ex)
                    {
                        Library.WriteErrorLog("Service Erreur : " + ex.Message);
                        //Stop the Windows Service.
                        base.OnStop();
                    }
                    NetworkShare.DisconnectFromShare(@"" + SourcePath, false);
            }

Discussions similaires

  1. Envoyer un fichier txt par mail avec agent SQL
    Par vponcet0774 dans le forum Développement
    Réponses: 4
    Dernier message: 06/03/2012, 18h17
  2. [XL-2010] transforme fichier Txt en XML avec EXCEL
    Par bforzeus dans le forum Excel
    Réponses: 1
    Dernier message: 05/03/2012, 23h31
  3. ouvrir fichier .txt dans excel avec des champs texte
    Par rom05 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/05/2008, 18h27
  4. Import de fichiers txt en VBA avec paramètres automodulabes
    Par guiguisb dans le forum VBA Access
    Réponses: 0
    Dernier message: 10/09/2007, 11h20
  5. fichier txt to pdf (avec formattage)
    Par thesmall dans le forum Documents
    Réponses: 3
    Dernier message: 24/01/2007, 13h30

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