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

VB.NET Discussion :

Lister un grand nombre de fichier ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 13
    Par défaut Lister un grand nombre de fichier ?
    Bonjour à tous,

    Je suis en train de développer un programme de synchro entre 2 répertoires.
    J'ai un répertoire en local sur mon C: et l'autre sur un serveur qui est à 500km de mon poste. La synchro est faite sur environ 1500 fichiers dans différents sous-répertoires.
    Le problème est que l'analyse des 1500 fichiers sur un serveur avec un débit de 200Ko/s me prend environ 8min sans compter la copie des fichiers.

    Pour la synchro j'ai besoin uniquement de lister le chemin complet du fichier avec sa date de création.
    J'ai fait un code récursif qui est le suivant :
    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
        Public ListeDateSource, ListeFichierSource As New StringCollection
     
        Public Sub main_serveur()
            Call liste_fichier("\\monServeur\monRepertoire")   '8min pour 1500 fichiers
        End Sub
     
        Public Sub main_local()
            Call liste_fichier("C:\monRepertoire")      '32s pour 1500 fichiers
        End Sub
     
        Public Sub liste_fichier(ByVal iSource As String)
            '-----------------------------------------
            '------- Traitement des fichiers ---------
            '-----------------------------------------
            For Each cheminFichierSource As String In Directory.GetFiles(iSource)       'Parcours tous les fichiers du répertoire source
                ListeDateSource.Add(File.GetLastWriteTime(cheminFichierSource).Date)    'Ajout de la date du fichier source dans la liste
                ListeFichierSource.Add(cheminFichierSource)                             'Ajout du nom du fichier source dans la liste
            Next
     
            '-----------------------------------------
            '--- Traitement des sous répertoires -----
            '-----------------------------------------
            For Each sousRepertoire As String In Directory.GetDirectories(iSource)      'Parcours les sous répertoires de manière récursive
                Call liste_fichier(sousRepertoire)
            Next
        End Sub
    Je pense que l'accès aux 1500 fichiers du serveur est long puisque l'accès des fichiers est fait un par un.

    Il y a forcement une solution puisque avant j'utilisais le logiciel de synchro Syncback qui faisait l'analyse en quelques secondes avec le même nombre de fichiers.

    En gros, je cherche un moyen pour lister tous les fichiers sur le serveur en une seule fois avec uniquement le chemin et la date du fichier.

    Merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Tu peux créer un service windows ou un webservice sur le serveur qui fera l'analyse et te renverra les résultats de l'analyse. Ensuite tu pourras récupérer les fichiers en utilisant la méthode que tu utilises actuellement.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    meme sans faire de webservice, il faut que ca soit ton serveur qui execute une partie du code sinon c'est normal que ca soit long

    je ne sais pas ce que tu vérifies mais il faut faire un genre de checksum de chaque coté pour que seul les checksums transitent par le réseau
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par sperot51
    meme sans faire de webservice, il faut que ca soit ton serveur qui execute une partie du code sinon c'est normal que ca soit long

    je ne sais pas ce que tu vérifies mais il faut faire un genre de checksum de chaque coté pour que seul les checksums transitent par le réseau
    Ce qui est exactement ce que j'ai dit
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 13
    Par défaut
    Oui pourquoi pas, mais je ne suis pas administrateur sur ce serveur. J'ai seulement les droits de lecture/écriture sur ce répertoire, donc pas possible pour moi de créer un webservice.

    Je peux aussi mettre sur le serveur un fichier txt qui récapitule tous les fichiers, et le code lira uniquement ce fichier.
    Mais je ne trouve pas ça très souple puisque que ca nécessite de faire une mise à jour du fichier txt dès que l'on modifie un ou plusieurs fichiers du serveur...
    Et dans le cas ou on oublie de faire la mise à jour du fichier txt, la synchro ne sera pas bonne, voir même un plantage dans le cas ou un fichier aura été supprimer sur le serveur.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    faire la synchro entre 2 elements necessite une communicationo entre ces 2 elements
    actuellement il y a bien une communication fournie par windows, mais elle ne convient pas à ce que tu veux faire
    donc tu fais comprendre au demandeur que si tu ne peux pas mettre un soft sur le serveur en question, ce que tu veux faire sera très lent ...
    et si c'est toi le demandeur, tant pis pour toi


    Citation Envoyé par SaumonAgile
    Ce qui est exactement ce que j'ai dit
    ah oui mal lu
    quoi que je détaille un poil plus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 13
    Par défaut
    Ok mais comme je l'ai dit dans mon 1er message, le logiciel SyncBack (disponible ici) fonctionne super rapidement. Je ne sais pas avec quoi il est déleoppé mais c'est bluffant à la vitesse ou il analyse les fichiers du serveur avec une bande passante pourrie...

    La solution serait peut être de le lancer et de le controler en VB .net en tache de fond...

Discussions similaires

  1. Copier en local un grand nombre de fichiers
    Par grimat dans le forum SharePoint
    Réponses: 4
    Dernier message: 27/07/2010, 16h59
  2. Verrouiller un grand nombre de fichiers
    Par justgreat dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/11/2009, 11h41
  3. Compiler un grand nombre de fichiers
    Par kaguouille dans le forum C
    Réponses: 1
    Dernier message: 13/02/2009, 18h17
  4. grands nombre dans fichiers csv xls
    Par laurent.c123 dans le forum Documents
    Réponses: 3
    Dernier message: 09/07/2007, 22h28

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