Bien sur que si que tu vas le réécrire a chaque fois. Ne serait-ce qu'a cause des suppressions de texte.
Citation :
Si le fichier trouvé est déjà présent dans le fichier texte alors j'indique par un message comme quoi le fichier existait déjà précédemment.
|
S'il y a que cela, de spécial...
1) tu lis ton fichier, tu mets chaque nom de fichier comme clé d'un hash
2) tu réécris ton fichier en procédant ainsi: tu parcours ton répertoire avec search
Pour chaque fichier trouvé,
soit il est clé du hash fabriqué en 1, et tu l'écris dans le fichier en indiquant qu'il s'y trouvait précédemment
soit il n'est pas clé, et tu l'écris dans le fichier
Bref c'est qque chose comme ceci (à adapter à tes besoins):
Code :
use strict; use warnings; use File::Find; my $filename = "D:\\report_$date.txt"; my ($fh, %oldfiles); if (-f $filename) { open $fh, "<", $filename; %oldfiles = map {s/ (\ s:Fichier deja present dans $filename)?\n$//o; ($_, 0)} < $fh>; } open $fh, "+>", $filename; my $dir = "C:\\temp"; find( \&search, $dir ); sub search { if (-f "$_" ) { if (defined $oldfiles{$File:: Find:: name}) { print $fh "$File::Find::name :Fichier deja present dans $filename\n"; } else { print $fh "$File::Find::name\n"; } } }
|
J'utilise le nom relatif au dossier donné en argument $File::Find::name afin d'avoir un nom de fichier unique utilisable comme clé (bon, s'il y a pas de sous répertoires, ou si on est sur que les noms de fichiers (sans path) sont uniques, on peut utiliser $_ directement).
A+,
Message édité par gilou le 07-11-2014 à 17:08:54
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --