Page 1 sur 2
[R] Liste les dernier fichier
Posté : jeu. 26 déc. 2013 16:56
par silvere
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

Re: [...] Liste les dernier fichier
Posté : jeu. 26 déc. 2013 17:51
par mikell
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
Re: [...] Liste les dernier fichier
Posté : jeu. 26 déc. 2013 20:21
par jguinch
Oui,
ou ça, c'est sympa aussi.
Re: [...] Liste les dernier fichier
Posté : ven. 27 déc. 2013 19:56
par silvere
@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
J'ai commencer ça :
► Afficher le texte
Code : Tout sélectionner
#include <File.au3>
$Dossier = @ScriptDir
$Size = DirGetSize($Dossier)
$List = _FileListToArray($Dossier)
While 1
If DirGetSize($Dossier) <> $Size Then
If _FileListToArray($Dossier) <> $List Then
;~ recupere les fichiers ajoutes
EndIf
$Size = DirGetSize($Dossier)
EndIf
WEnd
Mais je ne sais pas comment continuer
Re: [...] Liste les dernier fichier
Posté : ven. 27 déc. 2013 22:06
par mikell
J'aurais dû le laisser dans les demandes de script
► Afficher le texte
Code : Tout sélectionner
#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
Re: [...] Liste les dernier fichier
Posté : ven. 27 déc. 2013 23:09
par silvere
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
et reprendre la variable mais j'ai pas réussi

, il faudrait que je face comment ?
Merci pour ton aide

Re: [...] Liste les dernier fichier
Posté : sam. 28 déc. 2013 08:49
par jl56
Bonjour à tous
J'interviens sur ce post car une partie du script m’intéresse par contre en testant cette partie elle ne fonctionne pas toujours!
► Afficher le texte
Code : Tout sélectionner
#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
Avez vous SVP des suggestions
Merci
JL56
Re: [...] Liste les dernier fichier
Posté : sam. 28 déc. 2013 11:14
par mikell
Oui ça arrive quand on écrit un script un peu vite
@jl56
Si le script n'est pas dans le dossier à vérifier, faut mettre le chemin complet
@silvere
Hum le tri des extensions n'était pas dans ton cahier des charges
Tu peux introduire une condition dans la 2ème boucle
Code : Tout sélectionner
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
Re: [...] Liste les dernier fichier
Posté : sam. 28 déc. 2013 14:10
par jl56
@mikell
ça fonctionne je n'avais pas vu l'erreur
Merci
JL56
Re: [...] Liste les dernier fichier
Posté : sam. 28 déc. 2013 19:13
par silvere
@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.
Re: [..] Liste les dernier fichier
Posté : sam. 28 déc. 2013 19:21
par mikell
Dans ce cas utilie la date d'accès
Code : Tout sélectionner
$time = FileGetTime($Dossier & "\" & $file, [color=#BF0000]2[/color], 1)
Re: [..] Liste les dernier fichier
Posté : sam. 28 déc. 2013 20:03
par silvere
@mikell ça ne fonctionne pas la date d’accès
► Afficher le texte
Code : Tout sélectionner
#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
Re: [..] Liste les dernier fichier
Posté : sam. 28 déc. 2013 23:20
par silvere
J'ai décidé de faire d'une manière différente mais je bloque encore
► Afficher le texte
Code : Tout sélectionner
#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
L'udf utilisé est disponible
ici
Le problème est que je n'arrive pas a comparer les 2 tableau pour récupérer les éléments ajouté ou enlevé.
Re: [..] Liste les dernier fichier
Posté : sam. 28 déc. 2013 23:42
par mikell
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 ?
Re: [..] Liste les dernier fichier
Posté : dim. 29 déc. 2013 00:06
par silvere
Au début le dossier est vide puis les fichiers s'ajoutent ne cherche pas la souris ou elle n'est pas

Re: [..] Liste les dernier fichier
Posté : dim. 29 déc. 2013 10:05
par jguinch
Est-ce que ça te convient ?
► Afficher le texte
Code : Tout sélectionner
#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
Re: [..] Liste les dernier fichier
Posté : dim. 29 déc. 2013 12:14
par jchd
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.
Re: [..] Liste les dernier fichier
Posté : dim. 29 déc. 2013 12:27
par silvere
J'ai fait un essaye ton code n'est pas fonctionnel

Re: [..] Liste les dernier fichier
Posté : dim. 29 déc. 2013 13:27
par jguinch
Ah ? Chez moi ça marche plutôt bien...
Tu as remplacé la valeur de $sDossier par ton chemin ?
Re: [..] Liste les dernier fichier
Posté : dim. 29 déc. 2013 20:55
par silvere
@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 :
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <File.au3>
#include <FileListToArrayXT.au3>
Global $Dossier = @DesktopDir
Global $aFiles[1]
Global $TailleListe = 10
Dim $ListeTri[$TailleListe]
Global $Extention = "*";.avi;*.mkv
Global $CheminListFichier = @ScriptDir & "\" & $TailleListe & " derniers fichier.txt"
$ListFichier = _FileListToArrayXT($Dossier, $Extention, 1)
While 1
$NouvelleListFichier = _FileListToArrayXT($Dossier, $Extention, 1)
If $NouvelleListFichier[0] <> $ListFichier[0] Then
;Recuperation des donnés
If not FileExists($CheminListFichier) Then
FileWrite($CheminListFichier, "")
Else
$hFile = FileOpen($CheminListFichier, 0)
If FileRead($hFile) <> "" Then
For $i = 1 To $TailleListe
$ListeTri[$i - 1] = FileReadLine($hFile, $i)
Next
EndIf
FileClose($hFile)
EndIf
If $NouvelleListFichier[0] > $ListFichier[0] Then
$NombreEnPlus = $NouvelleListFichier[0] - $ListFichier[0]
For $i = 1 To UBound($ListFichier) - 1
_ArrayDelete($NouvelleListFichier, _ArraySearch($NouvelleListFichier, $ListFichier[$i], 0, 0, 0, 0))
Next
For $i = 1 to $NombreEnPlus
_ArrayInsert($ListeTri, 0, $NouvelleListFichier[$i])
Next
If UBound($ListeTri) > $TailleListe Then ReDim $ListeTri[$TailleListe]
$hFile = FileOpen($CheminListFichier, 2)
_FileWriteFromArray($hFile, $ListeTri)
FileClose($hFile)
$ListFichier = $NouvelleListFichier
ElseIf $NouvelleListFichier[0] < $ListFichier[0] Then
$NombreEnMoins = $ListFichier[0] - $NouvelleListFichier[0]
For $i = 1 To UBound($NouvelleListFichier) - 1
_ArrayDelete($ListFichier, _ArraySearch($ListFichier, $NouvelleListFichier[$i], 0, 0, 0, 0))
Next
For $i = 1 To $NombreEnMoins
_ArrayDelete($ListFichier, _ArraySearch($ListeTri, $ListFichier[$i], 0, 0, 0, 0))
Next
$hFile = FileOpen($CheminListFichier, 2)
_FileWriteFromArray($hFile, $ListeTri)
FileClose($hFile)
$ListFichier = $NouvelleListFichier
EndIf
EndIf
WEnd