un Trieur de fichier Temps reel !

Programmation d'applications complexes
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

un Trieur de fichier Temps reel !

Message par Backup »

je fini un petit programme qui me sert en ce moment
voici ce que c'est:

pour des raison que je n'expliquerai pas ici ; juste un indice (SK*N*T)
je recois dans un dossier preci tout un tas de type de fichiers different
par telechargement..
je me suis fait un petit programme pour trier en temp reel ces fichiers qui arrive dans ce dossier, enfin par trier ,en fait il reprend les fichiers qui arrive
et les deplace dans le dossier Download et en fonction de l'extention du fichier recus envois ce fichier dans un autre dossier correspondant a son extention !!
pas clair ?

le fichier tartampion.jpg recu dans le dossier appeler inet (par exemple)
est recuperer par mon programme pour etre deplace dans le dossier
download\jpg\

si le fichier suivant s'appelle "tutu.txt", mon programe ira le mettre
dans download\txt\

compris ??

par extention ce program peut servire a trier votre dossier "download\
puisqu'il travaille en temps reel (en bouffant du temp machine :D )
tous les fichier que vous telechargé sur internet peuvent ainsi etre
automatiquement deplacé dans des dossier specifique a leur extention !!

ce que je vous propose c'est de mettre le source ici !! :)
apres vous le modifiez comme vous voulez !
ça interresse quelqu'un ? :) non? bon temps pis !! :)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Ben Dobro, faut te dire que tu es le plus beau !

Eh bonjour Monsieur du Dobro,
Que vous êtes joli, que vous me semblez beau,
Si votre codage se rapporte à votre verbiage,
Vous êtes le phénix des hôtes de chez moi!

A ces mots du Dobro ne se sentant plus pisser envoya son beau code pour le faire partager !

:P
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

fweil a écrit :Ben Dobro, faut te dire que tu es le plus beau !

Eh bonjour Monsieur du Dobro,
Que vous êtes joli, que vous me semblez beau,
Si votre codage se rapporte à votre verbiage,
Vous êtes le phénix des hôtes de chez moi!

A ces mots du Dobro ne se sentant plus pisser envoya son beau code pour le faire partager !

:P
:mrgreen:

Oui, ça serait bien
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

................
Dernière modification par Backup le mer. 28/sept./2011 9:33, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

moi, je pense que certains sont encore un train de se prendre la tête pour de l'humour au nième degrée :(

Je pense que fweil, comme toi d'ailleurs, n'a pas sa langue dans sa poche. c'est pas une raison pour se taper dessus (et encore moins sur moi, j'suis gentil moi, hein, allez donne une bise :silly: ) et surtout pas pour des pets des mouches !

bon, tu nous le donnes ce code au lieu de tergiverser :roll: :lol: c'est un forum donc même si ton code est nul (ou bien, à voir :mrgreen: ), il a sa place ici. pas la peine de demander l'avis des autres. :)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon allez , j'ai eu une reaction exessive comme d'hab !!
j'avais pas encore mangé !! :D !! excuse moi Fweil !!


voici le code :
j'utilise un son pour me signaler l'arrivée de certain type de fichier alors vou devrez surement virer les ligne de code concernant ce son !

ce code n'est pas du tou optimisé ! il est tel quel c'est un premier jet !!
hein Fweil !! ? :)

le program crée des dossier dans Download !!
il faut bien sur que ce dossier soit present dans c:\
si il existe deja des dossier avec ce nom, le program n'effacera pas le contenu des dossiers existant , il ne crera pas de dossier existant !!
(merci le purebasic qui fait ça d'office !!)




WindowID = OpenWindow(1, 50, 50, 370, 220, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget, "skynet trieur temps reel")


WindowID = WindowID(1)
Gadget=1
textgadget=2
buttondepart=3
textgadget2=4
textgadget3=5
textgadget4=6
textgadget5=7
avancement.s="|/-\"
; ******** ici on dessine les gagets *****************
If CreateGadgetList(WindowID)
;Gadget = EventGadgetID()
ListViewGadget(Gadget, 10, 20, 350,100)
ButtonGadget(buttondepart, 10, 130,150,20,"choisir le dossier a trier" ,#PB_Button_MultiLine)
TextGadget(textgadget3, 10, 180,350,50,"les fichier traité sont envoyé"+Chr(10)+"dans le repertoire : c:\download\"):; Info
TextGadget(textgadget4, 200, 5,350,15,"Prg crée par Dobro"):; Info

ActivateGadget(Gadget)
ActivateGadget(textgadget)
EndIf
; *********************************************
If InitSound()
Resultat = LoadSound(1,"D:\dobro\PureBasic\dobro\sons\boup.wav")
EndIf
nbr=1
;************************************************************
;Dim liste.s(10000)
; regarde si les dossiers sont crée ?
If OpenFile(1, "c:\dob.txt")
Texte$ = ReadString()
NomChemin$=ReadString()
CloseFile(1)
EndIf
If Texte$="ok"
Goto ok :; oui ils sont crée don pas la peine de le faire
EndIf
;*********************************************************
Resultat = MessageRequester("INFO","La premiere fois qu'il est lancé ce programme crée des"+Chr(10)+"répertoires dans c:\download\"+Chr(10)+"ceci peut prendre un peut de temps"+Chr(10)+"donc patience ! la fenetre peut devenir blanche c'est pas grave !"+Chr(10)+"bon ammusement !",#PB_MessageRequester_Ok )
Resultat = CreateDirectory("c:\download\")
Resultat = CreateDirectory("c:\download\recus\")
Resultat = CreateDirectory("c:\download\recus\jpg\")
Resultat = CreateDirectory("c:\download\recus\bmp\")
Resultat = CreateDirectory("c:\download\recus\gif\")
Resultat = CreateDirectory("c:\download\recus\mpg\")
Resultat = CreateDirectory("c:\download\recus\fza\")
Resultat = CreateDirectory("c:\download\recus\efa\")
Resultat = CreateDirectory("c:\download\recus\txt\")
Resultat = CreateDirectory("c:\download\recus\html\")
Resultat = CreateDirectory("c:\download\recus\mid\")
Resultat = CreateDirectory("c:\download\recus\mp3\")
Resultat = CreateDirectory("c:\download\recus\divx\")
Resultat = CreateDirectory("c:\download\recus\avi\")
Resultat = CreateDirectory("c:\download\recus\wav\")
Resultat = CreateDirectory("c:\download\recus\pdf\")
Resultat = CreateDirectory("c:\download\recus\doc\")
Resultat = CreateDirectory("c:\download\recus\rtf\")
Resultat = CreateDirectory("c:\download\recus\tif\")
Resultat = CreateDirectory("c:\download\recus\exe\")
Resultat = CreateDirectory("c:\download\recus\png\")
Resultat = CreateDirectory("c:\download\recus\rar\")
Resultat = CreateDirectory("c:\download\recus\zip\")
Resultat = CreateDirectory("c:\download\recus\ace\")
; ecrit comme quoi on a cree les dossiers!!
If OpenFile(1, "c:\dob.txt")
WriteStringN("ok")
NomChemin$="c:\inet\"
WriteStringN(NomChemin$)
CloseFile(1)
EndIf

ok:
TextGadget(textgadget2, 10, 160,350,20,"repertoire actuellement traité: "+NomChemin$,#PB_Text_Border):; on affiche le repertoire courant
Repeat: ;*************** boucle principale *****************



event=WaitWindowEvent()

If event = #PB_EventGadget : ; on a clique sur un gadget
GadgetID = EventGadgetID(): ; lequel ??

If GadgetID =buttondepart:; le bouton du choix du repertoire a traité
NomChemin$ = PathRequester("choisi le dossier a trier","c:\")
Delay (100)
If OpenFile(1, "c:\dob.txt")
WriteStringN("ok")
WriteStringN(NomChemin$)
CloseFile(1)

EndIf


EndIf
EndIf


;******************************************************************
;************** TRAITEMENT ***************************************
;*****************************************************************

TextGadget(textgadget2, 10, 160,350,20,"repertoire actuellement traité: "+NomChemin$,#PB_Text_Border):; on affiche le repertoire courant
Delay(1)
Resultat = ExamineDirectory(1 ,NomChemin$,"*.*" )
If Resultat=0
Resultat = MessageRequester("erreur","le repertoire "+NomChemin$+" n'a pus etre trouvé !",#PB_MessageRequester_Ok )
End
EndIf
;CallDebugger

While NextDirectoryEntry()<>0
car=car+1
If car>=5
car=0
EndIf
av.s=Mid(avancement.s, car,1)


TextGadget(textgadget5, 350, 5,10,15,av.s):; Info
Delay (100)


; flag=0
If NextDirectoryEntry()=1:; ha c'est un fichier !!
nom.s=DirectoryEntryName():; on recupere le nom du fichier

;******** RAR ***********************
If Right(DirectoryEntryName(),3)="rar":; en fonction de l'extention
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\rar\"+nom.s) :; on copy le fichier dans le dossier correspondant
Delay (100) :; on attend un peu que la copy soit effectuée
Resultat = DeleteFile(NomChemin$+nom.s):; puis on efface le fichier d'origine (ce qui crée le déplacement
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier RAR"):;on affiche bien gentiment ce qu'on a fait !

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget))):; on affiche le compteur
EndIf
;******** jpg ***********************
If Right(DirectoryEntryName(),3)="jpg" Or Right(DirectoryEntryName(),3)="jpeg"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\jpg\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier JPG")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** fza ***********************
If Right(DirectoryEntryName(),3)="fza"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\fza\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier FZA")
PlaySound(1 , 0):;on previen qu'un nouveau fichier est mis dans la liste

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** EFA ***********************
If Right(DirectoryEntryName(),3)="efa"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\efa\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier EFA")
PlaySound(1 , 0):;on previen qu'un nouveau fichier est mis dans la liste

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** ZIP ***********************
If Right(DirectoryEntryName(),3)="zip"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\zip\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier ZIP")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** ace ***********************
If Right(DirectoryEntryName(),3)="ace"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\ace\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier ACE")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** gif ***********************
If Right(DirectoryEntryName(),3)="gif"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\gif\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier GIF")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** BMP ***********************
If Right(DirectoryEntryName(),3)="bmp"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\bmp\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier BMP")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** MIDI ***********************
If Right(DirectoryEntryName(),3)="mid"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\mid\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier MID")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** MP3 ***********************
If Right(DirectoryEntryName(),3)="mp3"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\mp3\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier MP3")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** avi ***********************
If Right(DirectoryEntryName(),3)="avi"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\avi\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier AVI")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** divx ***********************
If Right(DirectoryEntryName(),3)="div"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\divx\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier DIVX")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** mpeg ***********************
If Right(DirectoryEntryName(),3)="mpg" Or Right(DirectoryEntryName(),3)="mpeg"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\mpg\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier MPG")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** html ***********************
If Right(DirectoryEntryName(),3)="htm" Or Right(DirectoryEntryName(),3)="html"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\html\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier HTML")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur

EndIf
;******** txt ***********************
If Right(DirectoryEntryName(),3)="txt"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\txt\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier TXT")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** wav ***********************
If Right(DirectoryEntryName(),3)="wav"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\wav\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier WAV")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** pdf ***********************
If Right(DirectoryEntryName(),3)="pdf"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\pdf\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier PDF")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** doc ***********************
If Right(DirectoryEntryName(),3)="doc"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\doc\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier DOC")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** rtf ***********************
If Right(DirectoryEntryName(),3)="rtf"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\rtf\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier RTF")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** tif ***********************
If Right(DirectoryEntryName(),3)="tif"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\tif\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier TIF")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** exe ***********************
If Right(DirectoryEntryName(),3)="exe"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\exe\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier EXE")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf
;******** png ***********************
If Right(DirectoryEntryName(),3)="png"
Resultat = CopyFile(NomChemin$+nom.s,"C:\download\recus\png\"+nom.s)
Delay (100)
Resultat = DeleteFile(NomChemin$+nom.s)
AddGadgetItem(Gadget,-1,"j'ai mis "+nom.s+" dans le dossier PNG")

TextGadget(textgadget, 10, 5,150,12,"nbr de fichier traité: "+Str(CountGadgetItems(Gadget)+1)):; on affiche le compteur
EndIf

;**************************************************************


EndIf
flag=0
Wend

;**************************************
;**************************************
;*************************************




Until event=#PB_Event_CloseWindow


End



ameliorez le, faite en un beau programe bien structure, bref eclatez vous
il est a vous ! :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

pourquoi tu n'as pas mis de select au leiu de ta série de If ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Dobro,

dsl, je ne pensait pas te froisser, c'était vraiment un sourire et pas une mise en cadre !

Bon, je recommencerai plus ... ou alors je changerai d'auteur.

Une remarque de mon côté sur ton code :

Tu as mis des Delay(100) pour temporiser le prog après les copies, ce qui est pratique et simple, mais pas tout à fait sur à 100%.

Il y a plusieurs manières de tester la bonne fin d'une copie. En particulier la vérification de taille de la copie qui doit être égale à la taille de l'original.

Dans ce cas avec PureBasic tu peux utiliser FileSize() pour prendre la taille sans ouverture de fichier.

C'est à priori une bonne façon de procéder, mais attention, ce n'est pas une panacée non plus, parce qu'une copie peut être dimensionnée à la création du fichier et pas forcément proprement copiée à l'instant où l'on regarde.

La seule vraie méthode, infaillible serait de faire une comparaison pour voir si l'original et la copie sont identiques. Dans ce cas on est obligé d'ouvrir les fichiers et d'en lire le contenu.

Dans ce cas il faut le faire avec des ReadData dans des buffers pour faire une comparaison rapide en mémoire.

Le truc c'est que tant que le fichier n'est pas terminé de copier, il est Lock, c'est à dire fermé, en principe, ce qui fait que l'on est sur que la copie est terminée quand on peut l'ouvrir, et ensuite on est sur que son scontenu est identique à l'original si la comparaison ne retourne pas d'erreur.

Bon, là c'est juste pour donner quelques idées. Ca ne remt pas en cause le principe de placer un délai derrière une copie pour faire simple. Le seul hic qu'il peut y avoir c'est si on se trouve sur un serveur qui rame un peu à un moment donné, 100 ms ça peut être court par moment. Mais si on met plus c'est le prog qui rame !

Question de compromis.

Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

..........
Dernière modification par Backup le mer. 28/sept./2011 9:32, modifié 1 fois.
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Dobro,

En fait le FileExist existe sous la forme :

Result = FileSize(FileName$)
Select Result
Case -2
Debug "Répertoire"
Case -1
Debug "Fichier introuvable"
Default
Debug "Le fichier fait : " + Str(Result) + " octets"
EndSelct

Ca fonctionne parfaitement comme ça.

Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

oui mais un FileExist c'est plus court !! :D
fo demander a fred de faire ça!
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ça serai pas plus simple de faire un movefile ?

y'a pas dans pb mais dans l'api win, ça existe
plus de problème de copie et d'effacement.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Ca serait plus simple, mais seulement si on veut pas garder les fichiers dans l'arborescence source.

MoveFile_(FichierSource, Destination)

Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Bon vala ce que j'ai fait avec l'idée de Dobro, sans certifier que le service rendu est le même.

Le programme démarre sur la remontée de tous les fichiers d'une arborescence et ne retient que les nos et chemins d'accès des fichiers dont l'extension correspond à l'une des extensions souhaitées.

La liste des fichiers est ensuite utilisée pour copier les fichiers dans un répertoire dont les sous-répertoires ont pour nom l'extension des fichiers de départ.

Si les sous-répertoires n'existent pas ils sont créés.

Un cas tordu : si l'on veut prendre les fichiers dont le nom d'extension est "". J'ai prévu de mettre dans la liste des extensions un séquence [] qui gère ce cas de figure.

Le programme est en mode console.

Voili voila. J'espère que ça fera avancer le schmilblick avant mon passage à Cajarc.

Code : Tout sélectionner

;
; Pour l'accès aux répoertoires spéciaux voir le post http://purebasic.myforums.net/viewtopic.php?t=6185&start=0
; Attention aux limitations en fonction de la version de l'OS.
;
; Ici je parse les fichiers du cache Internet Explorer pour les copier dans C:\inet
; et récupérer les fichiers copiés dans une arborescence telle que proposée par Dobro.
;
; Par contre j'ai repensé au truc et mis au point à partir d'une procédure recursive la méthode suivante :
;
; - lecture de la liste de tous les fichiers d'une arborescence en ne retenant que les noms dont l'extension
;   fait partie d'une liste d'extensions stockée dans la chaine ExtensionsList
; - copie de l'ensemble des fichiers retenus dans le répertoire de backup, en utilisant un sous répertoire dont
;   le nom est identique à l'extension. Si ce répertoire n'existe pas on le créé.
;
; Apparement la mise en copie successive d'un grand nombre de fichiers n'est pas un problème et il n'y a pas besoin de temporisation supplémentaire.
; L'OS négocie avec le programme et tout se passe bien.
;
Dim Directory.s(100) ; Tableau de chaines pour stocker le chemin d'accès du point d'arborescence courant dans la lecture récursive de l'arborescence
NewList FileNames.s() ; Liste de chaines pour stocker les noms de fichiers retenus pour le backup
Global DirectoryLevel.l, DirectoryEntryCounter.l, ExtensionsList.s

;
; Constantes API et OS pour l'accès aux dossiers spéciaux
;
#CSIDL_FLAG_CREATE = $8000 
#CSIDL_ADMINTOOLS = $30 
#CSIDL_ALTSTARTUP = $1D 
#CSIDL_APPDATA = $1A 
#CSIDL_BITBUCKET = $A 
#CSIDL_COMMON_ADMINTOOLS = $2F 
#CSIDL_COMMON_ALTSTARTUP = $1E 
#CSIDL_COMMON_APPDATA = $23 
#CSIDL_COMMON_DESKTOPDIRECTORY = $19 
#CSIDL_COMMON_DOCUMENTS = $2E 
#CSIDL_COMMON_FAVORITES = $1F 
#CSIDL_COMMON_PROGRAMS = $17 
#CSIDL_COMMON_STARTMENU = $16 
#CSIDL_COMMON_STARTUP = $18 
#CSIDL_COMMON_TEMPLATES = $2D 
#CSIDL_CONTROLS = $3 
#CSIDL_COOKIES = $21 
#CSIDL_DESKTOP = $0 
#CSIDL_DESKTOPDIRECTORY = $10 
#CSIDL_DRIVES = $11 
#CSIDL_FAVORITES = $6 
#CSIDL_FONTS = $14 
#CSIDL_HISTORY = $22 
#CSIDL_INTERNET = $1 
#CSIDL_INTERNET_CACHE = $20 
#CSIDL_LOCAL_APPDATA = $1C 
#CSIDL_MYPICTURES = $27 
#CSIDL_NETHOOD = $13 
#CSIDL_NETWORK = $12 
#CSIDL_PERSONAL = $5 
#CSIDL_PRINTERS = $4 
#CSIDL_PRINTHOOD = $1B 
#CSIDL_PROFILE = $28 
#CSIDL_PROGRAM_FILES = $2A 
#CSIDL_PROGRAM_FILES_COMMON = $2B 
#CSIDL_PROGRAM_FILES_COMMONX86 = $2C 
#CSIDL_PROGRAM_FILESX86 = $2A 
#CSIDL_PROGRAMS = $2 
#CSIDL_RECENT = $8 
#CSIDL_SENDTO = $9 
#CSIDL_STARTMENU = $B 
#CSIDL_STARTUP = $7 
#CSIDL_SYSTEM = $25 
#CSIDL_SYSTEMX86 = $29 
#CSIDL_TEMPLATES = $15 
#CSIDL_WINDOWS = $24 
#NOERROR = 0 
#MAX_PATH = 260 

;
; Cette procédure retourne le chemin d'accès à l'un des répertoires spéciaux accessibles par l'une des constantes ci-dessus
;
Procedure.s GetSpecialFolderLocation(lngCSIDL.l) 
  Protected lngRet.l 
  Protected strLocation.s 
  Protected pidl.l 
  strLocation = Space(#MAX_PATH) 
  lngRet = SHGetSpecialFolderLocation_(0, lngCSIDL, @pidl) 
  If lngRet = #NOERROR 
    SHGetPathFromIDList_(pidl, @strLocation) 
    If lngRet = #NOERROR 
      ProcedureReturn RTrim(strLocation) 
    EndIf        
    CoTaskMemFree_(pidl) 
  EndIf 
EndProcedure 

;
; Procédure récursive permettant de lire la totalité d'une arborescence de fichiers. la liste des fichiers retenus est stockée dans la liste FileNames()
;
Procedure ParseDirectory()
  If ExamineDirectory(DirectoryLevel, Directory(DirectoryLevel), "*.*")
      Repeat
        UseDirectory(DirectoryLevel)
        Type = NextDirectoryEntry()
        Select Type
          Case 0
          Case 1
            FileName.s = Directory(DirectoryLevel) + DirectoryEntryName()
            ThisExtension.s = GetExtensionPart(FileName)
            If (FindString(ExtensionsList, ThisExtension, 1) And ThisExtension <> "") Or (ThisExtension = "" And FindString(ExtensionsList, "[]", 1))
                DirectoryEntryCounter + 1 ; Un compteur qui s'affiche de temps en temps
                If DirectoryEntryCounter % 100 = 0
                    ConsoleLocate(0, 1)
                    PrintN("Parsed " + RSet(Str(DirectoryEntryCounter), 6, " ") + " items")
                EndIf
                AddElement(FileNames())
                FileNames() = FileName
            EndIf
          Case 2
            Name.s = DirectoryEntryName()
            If Name <> "." And Name <> ".."
                Name = Directory(DirectoryLevel) + Name + "\"
                DirectoryLevel + 1
                Directory(DirectoryLevel) = Name
                ParseDirectory()
                UseDirectory(DirectoryLevel)
            EndIf
        EndSelect
      Until Type = 0
  EndIf
  DirectoryLevel - 1
  ConsoleLocate(0, 1)
  PrintN("Parsed " + RSet(Str(DirectoryEntryCounter), 6, " ") + " items")
EndProcedure

;
;
;
  OpenConsole()
    DirectoryLevel = 0 ; Le niveau de l'arborescence est initialisé à 0
    Directory(DirectoryLevel) = GetSpecialFolderLocation(#CSIDL_INTERNET_CACHE) + "\" ; On nomme un point de départ de l'arborescence à analyser
    ExtensionsList.s = "avi bmp gif jpeg jpg png" ; Liste des extensions des fichiers à conserver. Un cas particulier pour les fichiers dont l'extension est vide : on place [] dans ExtensionsList
    PrintN("Lecture de l'arborescence source")
    ParseDirectory() ; Lecture de l'arborescence.
    BackupDirectory.s = "C:\inet\" ; Chemin d'accès pour le backup
    PrintN("Copie des fichiers")
    TotalFiles.l = CountList(FileNames())
    CurrentFiles.l = 0
    ResetList(FileNames()) ; Lecture de la liste des fichiers retenus
    While NextElement(FileNames()) ; Tant qu'il y a des noms de fichiers
      ThisExtension.s = GetExtensionPart(FileNames()) ; On prend l'extension du fichier courant
      If FileSize(BackupDirectory + ThisExtension) = -1 ; On regarde si un sous-répertoire du répertoire de backup porte déjà ce nom d'extension
          CreateDirectory(BackupDirectory + ThisExtension) ; Si ce n'est pas le cas on le créé.
      EndIf
      CurrentFiles + 1 ; Un compteur qui s'affiche de temps en temps
      If CurrentFiles % 100 = 0
          ConsoleLocate(0, 2)
          PrintN("Copying " + RSet(Str(CurrentFiles), 6, " ") + " files")
      EndIf
      CopyFile(FileNames(), BackupDirectory + ThisExtension + "\" + GetFilePart(FileNames())) ; On copie le fichier dans le sous-répertoire portant pour nom le nom d'extension du fichier.
    Wend ; Et on boucle
    PrintN("")
    PrintN("Taper une touche pour fermer ...")
    While Inkey() = "" : Wend
  CloseConsole()
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

; Apparement la mise en copie successive d'un grand nombre de fichiers n'est pas un problème et il n'y a pas besoin de temporisation supplémentaire.

@Fweil
Je m"en doutais un peut ,mais j'avais mis une petite securité au cas ou !! :)

Pour ce qui est de ta version : Bravo ,rien a dire ! :D
faire un choix des extention etait dans mes previsions , mais moi je suis un lent alors .. Merci pour ton travail
:D
j'ai prevu de rajouter des boites a cocher pour choisir les extentions concerné et un radio bouton pour choisir de deplacer les fichier ou de les copier seulement !! au choix !!

a ce titre je doit prevenir que si vous utilisez ce soft tel qu'il est ne choissez pas n'importe quel dossier genre c:\windows
car cela risque de deplacer des fichier importants (vous les retrouverez dans le dossier download , mais ça va etre galere pour refaire le chemin inverse !! attention donc !




par contre mon program etant fait en fenetre a un coté multitache
qui fait que tu le laisse tourner en fond, et il se charge tous seul "en temps reel" c'est a dire en permanence de deplacer tout fichiers qui arrive dans le dossier c:\inet pour les mettres dans c:\download et dans un repertoire correspondant a son extention
comme ça si tu recoit des fichiers au gres de tes telechargements
dans le dossier download par exemple et que tu configure le programe pour "trier" download , bin tes fichiers seront trié en temps reel ,a fur et a mesure qu'il arrivent !! c'etait surtout ça l'interet de la chose !!
moi je reçoit des fichiers qui m'arrive par ma parabole !!! et il peut en arriver 100 en 3 minutes !! :D
d'ou l'interet de ce programme !!! :D


@ le soldat
ça serai pas plus simple de faire un movefile ?
moi je suis daccord !! toute nouvelle commande pure est bonne a prendre
meme si elle double des commandes existante par l'API
je trouve que le pure simplifie l'ecriture d'une commande
l'api est souvent obscure de prime abord ! surtout a la comprehension :D
Dernière modification par Backup le mar. 25/mai/2004 21:59, modifié 3 fois.
Répondre