Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment connaître les dates de création, de dernière modification et de dernier accès à un fichier
auteur : Romain Puyfoulhoux
En passant soit par les API, soit par le FileSystemObject. En natif, VB ne donne accès qu'à la date de dernière modification, via la fonction FileDateTime(). Si vous choisissez de passer par les API, voici les déclarations nécessaires :
Private Const MAX_PATH = 260
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type
Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Private Const INVALID_HANDLE_VALUE = -1
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
                                       (ByVal lpFileName As String, _
                                       lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Declare Function FileTimeToSystemTime Lib "kernel32" _
                                              (lpFileTime As FILETIME, _
                                               lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" _
                                                 (lpFileTime As FILETIME, _
                                                  lpLocalFileTime As FILETIME) As Long
Les dates d'un fichier sont récupérées par la fonction FindFirstFile qui attend en paramètres le nom du fichier et une structure WIN32_FIND_DATA qui reçoit les informations obtenues. Les dates de création, de dernière modification et de dernier accès sont stockées respectivement dans les champs ftCreationTime, ftLastWriteTime et ftLastAccessTime, tous de type FILETIME. Pour avoir des dates sous une forme exploitable, quelques conversions sont nécessaires. Notre fonction FileTimeToDate() convertit une date de type FILETIME en type Date.
Private Function FileTimeToDate(ft As FILETIME) As Date

Dim datelocale As FILETIME, datesys As SYSTEMTIME

If FileTimeToLocalFileTime(ft, datelocale) = 0 Then Exit Function
If FileTimeToSystemTime(datelocale, datesys) = 0 Then Exit Function
FileTimeToDate = CDate(datesys.wDay & " " & datesys.wMonth & " " & datesys.wYear & " " & _
                       datesys.wHour & ":" & datesys.wMinute & ":" & datesys.wSecond)

End Function
La partie principale du code est assez simple :
Dim findData As WIN32_FIND_DATA, hFind As Long

hFind = FindFirstFile("c:\autoexec.bat", findData)
If hFind = INVALID_HANDLE_VALUE Then Exit Sub
FindClose hFind

MsgBox "Crée le : " & FileTimeToDate(findData.ftCreationTime)
MsgBox "Modifié le : " & FileTimeToDate(findData.ftLastWriteTime)
MsgBox "Accédé le : " & FileTimeToDate(findData.ftLastAccessTime)
Pour terminer, voici la version avec le FileSystemObject :
Dim fso As FileSystemObject, f As File

Set fso = New FileSystemObject

On Error GoTo fin
Set f = fso.GetFile("c:\autoexec.bat")
MsgBox "Crée le : " & f.DateCreated
MsgBox "Modifié le : " & f.DateLastModified
MsgBox "Accédé le : " & f.DateLastAccessed
Set f = Nothing

fin:
Set fso = Nothing
lien : FAQ VB

Comment savoir si un fichier donné se trouve bien dans un répertoire ?
auteur : Ludolitaliano
On peut utiliser la fonction Dir() :
Dim NomFichier as string
NomFichier=Dir("C:\NomDuRepertoire\*.txt") 
Ici, NomFichier reçoit "UnFichier.txt" le premier fichier texte d'extension txt du répertoire.

Vous pouvez réappeler la ligne qui suit pour avoir le nom du fichier suivant :
NomFichier=Dir("C:\NomDuRepertoire\*.txt") 
Lorsqu'il n'y aura plus de fichier d'extension txt, la variable NomFichier sera nulle.


Comment savoir si un fichier existe ?
auteur : Romain Puyfoulhoux
If Dir("c:\temp\Erreurs.tmp", vbHidden) <> "" Then
    'le fichier existe (vbHidden permet de le retrouver même s'il est caché)
End If
lien : FAQ VB

Comment connaître la taille d'un dossier ou répertoire ?
auteur : FRED.G
Il suffit de référencer la librairie Micosoft Scripting Runtime afin de pouvoir utiliser l'objet FileSystemObject.
Ensuite, on peut utiliser un code comme celui-ci :
Dim fso as new scripting.filesystemobject
Dim fld as scripting.folder

Set fld = fso.getfolder("c:\Chemin\EtNomDu\Dossier")
Msgbox fld.Size

Set fld = nothing
Set fso = nothing

Comment récupérer la taille d'un fichier ?
auteur : Abelman
Debug.Print FileLen("nomdufichier") 'Affiche en octets la taille du fichier
lien : FAQ VB

Comment obtenir la taille d'un répertoire ?
auteur : Team Access
Voici une méthode simple utilisant le FileSystemObject. Placez ce code dans un module :
Public Enum UniteMemoire
    octets = 1
    kiloOctets = 2
    megaOctets = 3
End Enum

Public Function TailleRepertoire(f As Folder, Optional unite As UniteMemoire = 1) As Long

Dim s As Long

s = f.Size
Select Case unite
    Case 2:
        TailleRepertoire = Int(s / 1024)
    Case 3:
        TailleRepertoire = Int(s / 1048576)
    Case Else:
        TailleRepertoire = s
End Select

End Function
Un exemple d'utilisation :
Private Sub Test()

Dim fs As FileSystemObject, f As Folder, strTaille As String

Set fs = New FileSystemObject
Set f = fs.GetFolder("c:\windows")

strTaille = Format(TailleRepertoire(f), "##,##0 octets") & vbCrLf & _
            Format(TailleRepertoire(f, kiloOctets), "##,##0 Ko") & vbCrLf & _
            Format(TailleRepertoire(f, megaOctets), "##,##0 Mo")
MsgBox strTaille

End Sub
lien : FAQ VB

Comment récupérer les propriétés d'un PDF
auteur : Cafeine
Pour obtenir les propriétés d'un PDF (nom, titre, etc.), il faut lire le fichier en mode binary. L'utilisation des RegExp permettra d'accéder aux informations recherchées. C'est ce que fait la fonction suivante :

Function GetPDFTitle(ByVal strFic As String, strObj As String) As String

Dim fic As Integer
Dim strExp As String
Dim strBuff As String * 1024
Dim i As Integer

Dim reg As VBScript_RegExp_55.RegExp
Dim Match As VBScript_RegExp_55.Match
Dim Matches As VBScript_RegExp_55.MatchCollection

Set reg = New VBScript_RegExp_55.RegExp

reg.Global = True
reg.MultiLine = False
reg.IgnoreCase = True
reg.Pattern = "/" & strObj & "\((.*)\)"
    
Reset

fic = FreeFile

Open strFic For Binary Access Read As #fic

Do While Not EOF(fic)
    Get #fic, , strBuff
    strExp = strExp & strBuff
    
    If reg.Test(strExp) = True Then
        Set Matches = reg.Execute(strExp)
        For Each Match In Matches
            GetPDFTitle = Match.SubMatches(0)
        Next Match
        Exit Function
    Else
        strExp = right(strExp, 1024)
    End If
Loop
Reset

Set Match = Nothing
Set Matches = Nothing
Set reg = Nothing

End Function
Exemple d'utilisation :

getpdftitle( "d:\temp\20060331164202.pdf", "Title")
Il est possible de remplacer title par un des champs suivants :

  • CreationDate
  • ModDate
  • Title
  • Creator
  • Author
lien : fr Tutoriel : Le PDF gratuit pour Access
lien : fr Les expressions rationnelles / régulières dans Access par la pratique

Comment savoir si un fichier est ouvert ?
auteur : Cafeine
Au moyen d'une fonction qui tente d'ouvrir un fichier en écriture, en cas d'erreur retournée, cela indique que le fichier est déjà ouvert, dans le cas contraire, on considère qu'il est fermé.

Function IsFileOpen(ByVal strFic As String) As Boolean
    Dim fic As Integer
    On Error Resume Next
   
    fic = FreeFile()
    Open strFic For Input Access Read Lock Read Write As fic
   
    If Err.Number = 0 Then
        IsFileOpen = False
        Close fic
    Else
        IsFileOpen = True
    End If
End Function

Comment compter les fichiers dans un répertoire ?
auteur : random
Ci-joint vous trouverez une Fonction à ajouter dans un nouveau module qui vous permettra de compter le nombre de fichiers d'une ou plusieurs extensions voulues dans répertoire donné :
Function nbfich(chemin As String, ParamArray termin() As Variant) As Long
Dim fichier As String
Dim extension As Variant
Dim compteur As Long
For Each extension In termin
   fichier = dir(chemin & "\*." & extension)
   Do Until fichier = ""
   compteur = compteur + 1
   fichier = dir
   Loop
Next extension
nbfich = compteur
End Function
Voici comment appeler cette Fonction :
nbfich("c:\mesimages","gif","bmp","pcx")
Vous pouvez mettre une ou plusieurs extensions séparées par des virgules.


precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com