Filesystemlibrary, tout (+ que fso) sur les fichiers/dossiers/disques

Soyez le premier à donner votre avis sur cette source.

Vue 12 409 fois - Téléchargée 2 009 fois

Description

Bonjour à tous, ce code source est une "library" complète de fonctions qui permet de récupérer des infos et d'agir sur les fichiers/dossiers/disques logiques et physiques.

Un code un peu à la manière de FSO (d'ailleurs j'ai repris les noms des méthodes/propriétés), mais en plus complet.

Ce code s'organise de la manière suivante :

-FileSystem est une classe contenant toutes les fonctions nécessaires à l'obtention des infos et à la gestion des objets
-les classes File, Folder, Drive et PhysicalDisk sont des objets dont le nom est explicite, ils contiennent des properties et des méthodes
-les classes Files, Folders, Drives et PhysicalDisks qui sont des collections des objets File, Folder, Drive et PhysicalDisk.
-la classe ISearchEvent qui est à implémenter pour les events sur la recherche de fichiers par critères

Les collections gèrent le For Each ... In..., merci à ShareVB pour son (excellent) tuto !
Et merci à Renfield pour son tuto "perso" sur les interfaces.

Maintenant le (très long) listing des propriétés et méthodes des 5 classes ...

1) CLASSE FILE (objet fichier)
A. Méthodes

-RefreshInfos (refresh les propriétés de la classe)
-Copy
-CutFile (permet de découper le fichier en paquets de taille fixe ou bien en nombre de fichiers fixe. Voir ma source fusionneur/découpeur)
-Delete
-Move
-MoveToTrash (poubelle)
-Crypt
-Decrypt
-ShowPropertyBox (affiche la boite de dialogue propriétés de Windows)
-Rename
-DoesFileExist (fichier existant ou pas)
-IsFileAvailable (fichier dispo ou pas)
-ChangeAttributes
-ReadFileString (lecture dans le fichier)
-WriteFileString (écriture dans le fichier)
-GetIcon (récupère l'icone sous forme de IPictureDisp)
-SetDates (change les dates du fichier)
-Sanitize (lance la sanitization du fichier ATTENTION ==> C'EST LA DESTRUCTION IRREVERSIBLE DU FICHIER !)

B. Propriétés

-DriveName As String
-FolderName As String
-Drive As Drive (récupère l'objet Drive contenant le fichier)
-Path As String (path du fichier)
-Attributes As FileAttributes (attributs)
-FileExtension As String (extension)
-Folder As Folder (récupère l'objet Folder contenant le fichier)
-FileType As String (type de ficheier)
-AssociatedExecutableProgram As String (programme associé à l'ouverture du fichier)
-FileSize As Currency (taille, support des tailles >4Go)
-FileCompressedSize As Currency (taille compressée)
-DateCreated As String (date de création)
-DateLastModified As String (date de dernière modif)
-DateLastAccessed As String (date de dernier accès)
-IsHidden As Boolean
-IsReadOnly As Boolean
-IsSystem As Boolean
-IsNormal As Boolean
-IsArchive As Boolean
-IsCompressed As Boolean
-ShortName As String (nom court)
-ShortPath As String (path court)
-FileVersionInfos As FileVersionInfos (type perso contenant les propriétés ProductVersion, ProductName, OriginalFileName, InternalName, FileVersion, FileDescription, Copyright et CompanyName)

2) CLASSE FOLDER (objet dossier)
A. Méthodes

-RefreshInfos
-SetDates
-Crypt
-Decrypt
-Copy
-Delete
-Move
-MoveToTrash
-ShowPropertyBox
-Rename
-DoesFolderExist
-IsFolderAvailable
-ChangeAttributes
-GetIcon

B.Propriétés

-DriveName As String
-Path As String
-Drive As Drive
-DateCreated As String
-DateLastModified As String
-DateLastAccessed As String
-Attributes As FileAttributes
-IsHidden As Boolean
-IsArchive As Boolean
-IsCompressed As Boolean
-IsReadOnly As Boolean
-IsSystem As Boolean
-IsNormal As Boolean
-ShortPath As String
-ParentFolderName As String

3) CLASSE DRIVE (objet disque logique)
A. Méthodes

-RefreshInfos
-SetVolumeLabel (change le label du disque)
-CreateIso (créé un fichier ISO depuis le disque)
-Sanitize (lance la sanitization du disque ATTENTION ==> C'EST LA DESTRUCTION IRREVERSIBLE DES DONNES DU DISQUE !)
-IsDriveAvailable
-ShowPropertyBox
-ReadDriveString (lecture dans le disque, string de taille multiple de la taille d'un secteur)
-WriteDriveString (écriture dans le disque, string de taille multiple de la taille d'un secteur)
-GetIcon

B.Propriétés

-Cylinders As Currency
-TracksPerCylinder As Long
-SectorsPerTrack As Long
-PercentageFree As Double
-FreeSpace As Currency
-UsedSpace As Currency
-UsedClusters As Currency
-StartingOffset As Currency
-TotalSpace As Currency
-SectorPerCluster As Long
-BytesPerSector As Long
-FreeClusters As Long
-TotalClusters As Long
-TotalLogicalSectors As Currency
-TotalPhysicalSectors As Currency
-VolumeLetter As String
-BytesPerCluster As Long
-HiddenSectors As Long
-PartitionLength As Currency
-VolumeName As String
-VolumeSerialNumber As Long
-FileSystemName As String
-strMediaType As String
-DriveType As Byte
-strDriveType As String

4) CLASSE PHYSICALDISK (objet disque physique)
A. Méthodes

-RefreshInfos
-Sanitize (lance la sanitization du disque ATTENTION ==> C'EST LA DESTRUCTION IRREVERSIBLE DES DONNES DU DISQUE !)
-ReadPhysicalDiskString (lecture dans le disque, string de taille multiple de la taille d'un secteur)
-WritePhysicalDiskString (écriture dans le disque, string de taille multiple de la taille d'un secteur)

B.Propriétés

-Cylinders As Currency
-MediaType As MediaType
-TracksPerCylinder As Long
-SectorsPerTrack As Long
-TotalSpace As Currency
-BytesPerSector As Long
-TotalPhysicalSectors As Currency
-strMediaType As String
-DiskName As String
-DiskNumber As Byte

5) CLASSE FILESYSTEM (équivalent de FileSystemObjet, toutes les fonctions sont là)

A.Méthodes

-BrowseForFolder (boite de dialogue choix de dossier)
-ChangeFileAttributes
-CompareFiles (comapraison de fichiers)
-CopyFile
-CopyFolder
-CreateEmptyFile (création d'un fichier vide)
-CreateFolder
-CreateIsoFromDrive
-CutFile (découpage de fichier)
-DecryptFile
-DecryptFolder
-DeleteEmptyFolder
-DeleteFile
-DownloadFile
-DriveExists
-EncryptFile
-EncryptFolder
(tout ce qui commence par Enum... sert à énumérer des objets.
Pour les différences entre ces méthodes, voir l'exemple dans le zip)
-EnumDrives
-EnumDrivesStr
-EnumFiles
-EnumFilesStr
-EnumFolders
-EnumFoldersStr
-EnumPhysicalDisks
-EnumPhysicalDisksStr
-FileExists
-FolderExists
-FusionFiles (fusion de fichiers)
-GetAssociatedProgram
-GetDrive (récupère un objet Drive)
-GetDriveGeometry (infos sur la géométrie du disque logique)
-GetDriveName
-GetDriveSize (infos sur les tailles)
-GetDriveType
-GetDriveVolumeInfo (infos sur le volume)
-GetFile (récupère un objet File)
-GetFileAttributes
-GetFileDateAsCurrency
-GetFileDates (récupère les 3 dates)
-GetFileExtenion
-GetFileName
-GetFileSize
-GetCompressedFileSize
-GetFileType
-GetFileVersionInfos (infos sur les copyright, versions... des *.exe, *.ocx, *.dll...)
-GetFolder (récupère un objet Folder)
-GetFolderAttributes
-GetFolderDateAsCurrency
-GetFolderDates
-GetFolderName
-GetIcon (icone d'un fichier, disque, dossier)
-GetParentFolderName
-GetPhysicalDisk (récupère un objet PhysicalDisk)
-GetPhysicalDiskGeometry
-GetPhysicalDiskName
-GetShortName
-GetShortPath
-GetSpecialFolder (récupère un path de dossier spécial de windows)
-GetTempName (récupère un nom de fichier temporaire valide)
-IsDriveAvailable
-IsFileAvailable
-IsFolderAvailable
-IsPhysicalDiskAvailable
-IsRoot
-MoveFile
-MoveFolder
-MoveToTrash
-ReadDriveString
-ReadFileString
-ReadPhysicalDiskString
-Rename
-SanitizeFile
-SanitizeDisk
-SanitizePhysicalDisk
-SaveDataInFile (sauvegarde d'une string dans la suite d'un fichier)
Voir l'exemple dans le zip pour les 4 fonctions de recherche
-SearchForFiles
-SearchForFilesStr
-SearchForFolders
-SearchForFoldersStr
-SetFileDates
-SetFolderDates
-SetVolumeLabel
-ShellOpenFile (ouverture d'un fichier avec le prog associé)
-ShowDriveProperty
-ShowFileProperty
-ShowFolderProperty
-ShowOpen (boite de dialogue Ouvrir, support de la multisélection)
-ShowRunBox (boite de dialogue démarrer)
-ShowSave (boite de dialogue sauvegarder)
-WriteDriveString
-WriteFileString
-WritePhysicalDiskString

B.Propriétés

-Drives (collection des lecteurs existants)
-NumberOfPhysicalDisks
-PhysicalDisks (collection des disques physiques existants)

NOTES QUANT A CE CODE :

-il a pour but d'être exaustif au maximum ==> si vous avez des idées de nouvelles fonctions, SVP donnez les moi !
-il a pour but d'être performant ==> ce n'est pas totalement le cas, notamment pour l'obtention des infos sur les disques physiques. De même, l'organisation des classes objets peut, je pense, être simplifiée et améliorée. SVP des commentaires constructifs pour optimiser grandement tout çà !

Ce code sera inclus (quand complet, débugué et performant) dans la VbSystemLibrary disponible ici : http://vbsystemlibrary.free.fr/

Source / Exemple :


'tout dans le zip, ULTRA commenté comme d'habitude ;)

'pour la recherche, voir le zip pour l'exemple

Conclusion :


SVP ^^ :

-si vous avez des idées de nouvelles fonctions, proposez les TOUTES ^^
-commentez et notez svp ;)

Et le plus important ==> Si vous avez LA MOINDRE IDEE POUR OPTIMISER CE CODE, merci d'en m'en faire part !

Merci à tous, @+

/!\ http://vbsystemlibrary.free.fr/ /!\

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
28
Date d'inscription
mercredi 21 novembre 2001
Statut
Membre
Dernière intervention
12 décembre 2007

Salut,
Je voulais te dire que ton truc c hyper violent et super complet, que demande le peuple;)

Chapeau!!!
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Salut, oui, tu as parfaitement raison, c'est très lourd de récupérer une info par le GetFolder.

Donc en l'occurence, si tu veux récupérer le DateCreated de n folders beaucoup plus rapidement, tu feras :
1) s()=clsFile.EnumFoldersStr (ce qui ne récupère qu'un tableau de strings, pas d'objets)
2)
For x=1 to ubound(s())
....= GetFolderDates(s(x)).datecreated

Ainsi, on évite les étapes 2,3 et 4 que tu cites ;) On ne récupères QUE les dates, on n'a qu'à instancier une seule fois en début de prog Set clsFile = New FileSystem.

On n'utilisera GetFolder que pour récupérer toutes les infos sur un dossier, sinon on préferera la méthode que je viens de citer.

@+
Messages postés
11
Date d'inscription
jeudi 1 septembre 2005
Statut
Membre
Dernière intervention
1 avril 2011

d'abord bravo pr ta classe:
ca va me servir ds mon job parfois le fso de m$ laisse à désirer
voici qq suggestions à 1ere vue pr optimiser :
désolé car facile de critiquer, pas eu trop le tps d'examiner ta dll ou de bien rédiger, et me trompe peut-etre ds mon analyse
=> A toi de voir...

- En general pr optimiser:
attention, ton syst est assez lourd (normal, vu l'ampleur de ton boulot.)
mai vb étant ultra-lent: limite un max les encapsulages/intermerdiaires avant l'operation finale (ta dll serait nickel en c/c++...)
Quitte à etre moins 'propre', à perdre qq fonctionnalités plus 2aires (car ta dll est suffisament riche)

=> un ex du pb: on veut lire la prop de n répertoires
for each ... in ....
Set cFol = FS.GetFolder(Path,true)
... = cFol.DateCreated <-- c'est ca qui interesse
next

0) set FS= new FileSystem ' ok

1) FileSystem.GetFolder(Path) :
Set GetFolder = New Folder
GetFolder.SetPath(Path, True) ' 1er intermedaire : ok

2) Folder.Class_Initialize
Set clsFile = New FileSystem ' RE-filesystem: AIE!
3) Folder.SetPath(Path,true)
MyFolder.Path = Path
If RefreshInformations (<=true) Then Call RefreshInfos
4) RefreshInfos()
clsFile.GetFolderDates_HANDLE .GetShortPath .GetParentFolderName etc... etc...
' AIE AIE: => N accès au disque. tu extrait TOUTES les props dont je n'avais pas besoin et la, ca peut faire ramer

c'est pire avec la classe File ou on y rajoute des GetAssociatedProgram CompressedFileSize GetFileExtension etc...

je te file qq solutions ds les autres post
si tu fais evoluer ton code, ca m'interesse bcp.
bon courage et bravo
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Au passage, cette librairie a enfin été ajouté à la vb system library
http://vbsystemlibrary.free.fr/

Bonne journée à tous !
Messages postés
371
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013

Merci pour ta réponse, et en y repensant c'est vrai qu'il vaux mieux avoir qu'une seule librairie à utiliser dans une appli plutot que 2. Et je le redis c'est du bon boulot !

Bonne prog à tous...
@+ JLN
Afficher les 83 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.