Bonjour,
Serait-il possible qu'une âme charitable me fasse un scripte permettant de lister dans un fichier txt les 10 dernier fichier ajouté dans le dossier. C'est a dire que le programme tournerait tout le temps et dès qu'il vois un nouveau fichier il le rajoute au txt.
Merci d'avance
Modifié en dernier par silvere le lun. 30 déc. 2013 18:49, modifié 2 fois.
Quand même silvere avec 500 messages au compteur tu dois être capable de faire ça
En utilisant DirGetSize (c'est le moins lourd) dans une boucle pour surveiller l'apparition d'un nouveau fichier dans le dossier
" L'échec est le fondement de la réussite. " (Lao-Tseu ) " Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
@mikell Je t’avouerais que j'ai pas fait d'autoIt depuis longtemps et que j'aurais un peu de mal mais bon je vais m'y lancer quand j'aurais un peu de temps sa me fera pas de mal
@jguinch Je jette un coup d'oeil, merci !
Edit :
@jguinch je n'arrive pas a me servir de ton UDF
@mikell tu peut déplacer le topic dans aide général stp
#Include <Array.au3>
#include <File.au3>
$Dossier = @ScriptDir
$log = @desktopdir & "\log.log"
FileWrite($log, "") ; création du fichier log
; remplissage du log
Local $hSearch = FileFindFirstFile($Dossier & "\*.*")
Local $array[1][2]
$i = 0
While 1
$file = FileFindNextFile($hSearch)
If @error Then ExitLoop
$time = FileGetTime($file, 1, 1) ; date de création YYYYMMDDHHMMSS
$array[$i][0] = $file
$array[$i][1] = $time
$i += 1
Redim $array[$i+1][2]
WEnd
FileClose($hSearch)
_ArraySort($array, 1, 0, 0, 1) ; classe les fichiers par date
Redim $array[10][2] ; prend les 10 les plus récents
_ArraySort($array, 0, 0, 0, 1) ; inverse l'ordre
;_ArrayDisplay($array)
_FileWriteFromArray($log, $array) ; écrit l'array dans le log
$Size0 = DirGetSize($Dossier, 3)
$nb = $Size0[1] ; nombre total de fichiers dans le dossier
While 1
$Size = DirGetSize($Dossier, 3)
If $Size[1] > $nb Then
; prend la date du fichier le plus récent (dernière ligne du log)
$date = StringRegExpReplace(FileReadLine($log, -1), '.+\|(\d+)', "$1")
$hSearch = FileFindFirstFile($Dossier & "\*.*")
While 1
$file = FileFindNextFile($hSearch)
If @error Then ExitLoop
$time = FileGetTime($file, 1, 1)
If $time > $date Then ; compare les dates
FileWrite($log, $file & "|" & $time & @crlf) ; écrit dans le log
_ReplaceStringInFile($log, FileReadLine($log, 1) & @crlf, "") ; vire la 1ère ligne du log
Exitloop
EndIf
Wend
FileClose($hSearch)
$nb = $Size[1]
EndIf
Sleep(100)
WEnd
" L'échec est le fondement de la réussite. " (Lao-Tseu ) " Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Oo Merci mais si je déplace un fichier dans le dossier, sa date de création sera différente que la date ou je l'ai déplacé non ?
J'ai aussi essayé de trier en fonction des extension du genre
#Include <Array.au3>
#include <File.au3>
$Dossier = "c:"
;~ $Dossier = @ScriptDir
; remplissage du log
Local $hSearch = FileFindFirstFile($Dossier & "\*.*")
Local $array[1][2]
$i = 0
While 1
$file = FileFindNextFile($hSearch)
If @error Then ExitLoop
$time = FileGetTime($file, 2, 1) ; date de création YYYYMMDDHHMMSS
$array[$i][0] = $file
$array[$i][1] = $time
$i += 1
Redim $array[$i+1][2]
WEnd
FileClose($hSearch)
_ArraySort($array, 1, 0, 0, 1) ; classe les fichiers par date
;~ Redim $array[10][2] ; prend les 10 les plus récents
_ArraySort($array, 0, 0, 0, 1) ; inverse l'ordre
_ArrayDisplay($array)
Lorsque $dossier = @scriptdir cela fonctionne mais lorsque je modifie exemple c: la 2émm colonne n'est pas renseignée !
La fonction FileGetTime semble ne pas fonctionner dans certain cas !
J'ai modifié les paramètres et même redémarrer mon vieux XP pour vérifier , sans sucés
While 1
$file = FileFindNextFile($hSearch)
If @error Then ExitLoop
If not StringRegExp($file, '(?i).+\.(avi|mkv|mp4)') Then ContinueLoop
...
Tu peux aussi refaire le script sur le même principe mais à base de FileListToArray
Je n'ai pas fait non plus la gestion d'erreur, c'était juste un code pour montrer le mécanisme
" L'échec est le fondement de la réussite. " (Lao-Tseu ) " Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
@mikell Si je déplace un fichier dans le dossier, sa date de modification sera différente que la date ou je l'ai déplacé non ? Ce qui intéresserais ce serais la date de "d'arrivé" dans le dossier.
#Include <Array.au3>
#include <File.au3>
$Dossier = @DesktopDir
$log = @ScriptDir & "\log.log"
FileWrite($log, "") ; création du fichier log
$array = TenFirstMovieTime($Dossier)
_FileWriteFromArray($log, $array) ; écrit l'array dans le log
$Size0 = DirGetSize($Dossier, 3)
$nb = $Size0[1] ; nombre total de fichiers dans le dossier
While 1
$Size = DirGetSize($Dossier, 3)
If $Size[1] <> $nb Then
$array = TenFirstMovieTime($Dossier)
;_ArrayDisplay($array)
_FileWriteFromArray($log, $array)
$nb = $Size[1]
EndIf
Sleep(100)
WEnd
Func TenFirstMovieTime($Dossier)
Local $hSearch = FileFindFirstFile($Dossier & "\*.*")
Local $array[1][2]
$i = 0
While 1
$file = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringRegExp($file, '(?i).+\.(avi|mkv|mp4)') Then
$time = FileGetTime($Dossier & "\" & $file, 2, 1) ; date de création YYYYMMDDHHMMSS
$array[$i][0] = $file
$array[$i][1] = $time
$i += 1
Redim $array[$i + 1][2]
EndIf
WEnd
FileClose($hSearch)
_ArraySort($array, 1, 0, 0, 1) ; classe les fichiers par date
Redim $array[10][2] ; prend les 10 les plus récents
_ArraySort($array, 0, 0, 0, 1) ; inverse l'ordre
Return $array
EndFunc ;==>TenFirstMovieTime
#include <Array.au3>
#include <File.au3>
#include <FileListToArrayXT.au3>
Global $Dossier = @DesktopDir
Global $TailleListe = 10
Global $Extention = "*.avi;*.mkv"
Global $ListeTri = @DesktopDir & "\" & $TailleListe & " derniers fichier :" & $Extention & ".txt"
$ListFichier = _FileListToArrayXT($Dossier, $Extention, 1)
While 1
$NouvelleListFichier = _FileListToArrayXT($Dossier, $Extention, 1)
If $NouvelleListFichier[0] > $ListFichier[0] Then
[color=#FF0000]MsgBox(0, "", "On cherche les ou l'élement(s) en plus dans le tableau $NouvelleListFichier")[/color]
$ListFichier = _FileListToArrayXT($Dossier, $Extention, 1)
ElseIf $NouvelleListFichier[0] < $ListFichier[0] Then
[color=#FF0000]MsgBox(0, "", "On cherche les ou l'élement(s) en moins dans le tableau $NouvelleListFichier")[/color]
$ListFichier = _FileListToArrayXT($Dossier, $Extention, 1)
EndIf
WEnd
C'est faisable mais sur quoi tu te bases pour faire le log de départ avec les fichiers les plus récents ?
Tu le définis comment "récent" quand tu listes des fichiers déjà présents dans le dossier ?
" L'échec est le fondement de la réussite. " (Lao-Tseu ) " Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
#Include <Array.au3>
#include <File.au3>
Local $sDossier = "D:\tmp"
Local $sLogFile = @ScriptDir & "\mesFichiers.log"
Local $aFiles[1], $aList2, $iStart = 1
Local $iSize = DirGetSize($sDossier)
Local $aList = _FileListToArray($sDossier, "*", 1)
While 1
If DirGetSize($sDossier) <> $iSize Then
$iSize = DirGetSize($sDossier)
$aList2 = _FileListToArray($sDossier, "*", 1)
For $i = 1 To $aList2[0]
$iFound = 0
For $j = 1 To $aList[0]
If $aList2[$i] = $aList[$j] Then ContinueLoop 2
Next
_ArrayInsert($aFiles, 0, $aList2[$i] )
Next
If $iStart Then
$iStart = 0
Redim $aFiles[ Ubound($aFiles) - 1]
EndIf
If UBound($aFiles) > 10 Then Redim $aFiles[10]
_FileWriteFromArray($sLogFile, $aFiles)
$aList = $aList2
EndIf
Sleep(100)
WEnd
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Sinon il y a toujours la possibilité d'intercepter les changements avec un callback, ce qui est à la fois plus sûr (on ne risque pas de louper quoi que ce soit) et plus souple (on peut filtrer sur un tas de critères). Point de départ.
Une solide recherche dans les forums FR et US s'impose tout d'abord.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
@jchd J'ai rien trouvé sur le forum us en même temps j'ai du mal en anglais
@jguinch oui mais ça ne fonctionne pas
En me creusant la tête j'ai réussi a faire ceci mais j''obtient des erreurs :