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. P> < ol>
Tout d'abord, j'ai besoin de savoir s'il y a une autre façon. p> li>
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. P> li> ol>
Etat ancien: p> nouvel état: p> Je recherche C: \ FRESTFOLDER \ DEPIENTFOLDER \ C.DOC CODE>. P> P>
5 Réponses :
É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é. P>
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 strong> 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. P>
Les hashsets sont prometteurs, mais je ne sais rien à leur sujet ... je vais essayer d'essayer d'en apprendre davantage sur eux. Merci
Vous pouvez utiliser le FileSystemWatcher classe, Je pense que cela fait exactement ce que vous êtes après. P>
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
Je pense que le meilleur pari recouvre dans le répertoire et sauve l'état de l'état. Quelque chose comme ceci: Après cela, vous aurez la liste de l'état. Si vous avez également l'ancien état de la liste. Comparez les listes maintenant. P> p>
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.
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 } }
Je pense que le cadre de synchronisation peut être ce que vous recherchez. P>
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
Avez-vous besoin de savoir si i> il y avait un changement, c'est-à-dire un changement
boolean code> résultat, ou quel changement était, c'est-à-dire une liste code>? =)
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> ... ça marche mais c'est lent