8
votes

Comment puis-je vérifier si le contenu d'un dossier a été modifié

J'ai besoin d'une procédure qui vérifie si de nouveaux dossiers / fichiers ont été ajoutés à un dossier sélectionné donné. J'ai besoin de cette procédure pour exécuter lors de la mise en route de l'application afin que le temps de traitement à ce stade est important.

Je suppose que je peux faire un journal de l'état actuel, journal de l'état précédent, trier et les comparer. < ol>

  • Tout d'abord, j'ai besoin de savoir s'il y a une autre façon.

  • second s'il n'y a pas d'autre moyen de trouver la meilleure façon de trouver la différence entre deux listes de chemins de fichiers: la structure et les algorithmes.

    Etat ancien: xxx

    nouvel état: xxx

    Je recherche C: \ FRESTFOLDER \ DEPIENTFOLDER \ C.DOC .


  • 2 commentaires

    Avez-vous besoin de savoir si il y avait un changement, c'est-à-dire un changement boolean résultat, ou quel changement était, c'est-à-dire une liste ? =)


    Besoin de la liste ... J'ai réussi à faire cela de la manière suivante, créer un fichier XML pour le précédent et le bon état et la comparer à l'aide de "sauf" comme Timwi sugetd: Stackoverflow.com/questions/3647958/... ... ça marche mais c'est lent


    5 Réponses :


    1
    votes

    Étant donné que votre application ne fonctionne pas en continu, utilisez un FileSystemwatcher ne semble pas une bonne option pour vous, mais je voulais le mentionner car cela pourrait susciter des idées de votre côté.

    Si vous avez une liste de l'ancienne état et créez une liste du nouvel état, vous pouvez utiliser un algorithme comme celui décrit Voici Pour comparer les deux listes pour déterminer les ajouts et les suppressions depuis la création de la première liste. Cette réponse acceptée au lien fourni a également une belle solution qui fonctionne très bien si les listes ne sont pas triées.


    1 commentaires

    Les hashsets sont prometteurs, mais je ne sais rien à leur sujet ... je vais essayer d'essayer d'en apprendre davantage sur eux. Merci



    3
    votes

    Vous pouvez utiliser le FileSystemWatcher classe, Je pense que cela fait exactement ce que vous êtes après.


    2 commentaires

    Cela ne fonctionne que lorsque l'application est en cours d'exécution. Il ne détectera pas les modifications qui se produisent entre les invocations du programme.


    +1 @cyberdude: Merci, il est bon de savoir que cet auditeur existe, (cela m'a fait me demander si j'en ai aussi besoin) pour le moment où Chrisf a dit que cela n'atteignait que des modifications au cours de l'exécution, et j'ai besoin de savoir ce qui a changé depuis la précédente. exécution de l'application



    0
    votes

    Je pense que le meilleur pari recouvre dans le répertoire et sauve l'état de l'état. Quelque chose comme ceci: xxx

    Après cela, vous aurez la liste de l'état. Si vous avez également l'ancien état de la liste. Comparez les listes maintenant.


    1 commentaires

    Pas besoin de toutes les récursions, annuaire.getDirectories et dans le cadre 4.0 répertoire.enumeratedirectIrecteurs peut parcourir l'arborescence entière dans un seul appel. Sans oublier que le code ci-dessus nécessiterait également des déclarations de p / invoke supplémentaires, qui ne sont pas affichées.



    1
    votes

    Vous pouvez gagner des informations sur le temps du dernier état. Ensuite, vous pouvez simplement comparer les temps de création de fichiers et de dossiers avec cela. Le code suivant peut vous donner une idée:

    foreach(FileInfo f in dir.GetFiles() {
       if(f.CreationTime > dtLastState ) {
             //do some interesting stuff
       }
    } 
    


    0 commentaires

    2
    votes

    Je pense que le cadre de synchronisation peut être ce que vous recherchez.

    http://msdn.microsoft.com/en-us/sync /default.aspx


    1 commentaires

    J'ai besoin de comparer deux dossiers qui ont les mêmes sous-dossiers, mais les fichiers sont égaux uniquement par nom ... ils sont créés séparément afin que leur contenu, leur taille et leurs paramètres ne soient pas égaux au dossier source. C'est la raison pour laquelle je ne pense pas que votre solution fonctionnera pour moi cette fois-ci. Merci asaf