Date d'un fichier

Sujets variés concernant le développement en PureBasic
LavaLava

Date d'un fichier

Message par LavaLava »

Salut,
Malgré mes recherches dans l'aide, je ne trouve pas comment récupérer la date d'un fichier !
Quelqu'un serait-il comment faire ?
Merci
A+
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

regarde dans la section "trucs et astuces" , le soldat inconnu a posté un truc sur ce sujet.
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

T'as ça qui vient de Code Archives :

Code : Tout sélectionner

; English forum: http://purebasic.myforums.net/viewtopic.php?t=9024&highlight=
; Author: boop64  (exist file check added by Andre)
; Date: 05. January 2004


; Here is some simple code to get simple file info like when the file was created,
; modified or accessed last. The code is pretty straight forward and uses the
; following windows API calls I will put them in purebasic terms.
;
; GetFileTime_(FileID , A, B, C)
; FileID = Result obtained from using OpenFile(), ReadFile(), UseFile() etc.
; A = FILETIME structure to get the date And time the file was created.
; B = FILETIME structure to get the date And time the file was last accessed.
; C = FILETIME structure to get the date And time the file was last modified.
;
; FileTimeToLocalFileTime_(A, B)
; A = One of the FILETIME structures previously used in the GetFileTime_() function To be converted into a local file time.
; B = FILETIME structure to store converted file time.
;
; FileTimeToSystemTime_(A, B)
; A = FILETIME structure with local file time To be converted To system time.
; B = SYSTEMTIME structure to store converted system time.


FileToTest$ = "isnamevalid.pb"

;|---------------------|
;|  Coded By: Boop64   |
;|http://www.boop64.net|
;|---------------------|
;Structure FILETIME
;    dwLowDateTime.l
;    dwHighDateTime.l
;EndStructure

;Structure SYSTEMTIME
;    wYear.w
;    wMonth.w
;    wDayOfWeek.w
;    wDay.w
;    wHour.w
;    wMinute.w
;    wSecond.w
;    wMilliseconds.w
;EndStructure
;I left the structres commented here so that you can see what variables are acctually in them
;so that you can modify this code for your purposes.
;To use this just include in your projects.

Procedure.s WeekDay(day)
  Select day
  Case 0
    wday$ = "Sunday"
  Case 1
    wday$ = "Monday"
  Case 2
    wday$ = "Tuesday"
  Case 3
    wday$ = "Wedsday"
  Case 4
    wday$ = "Thursday"
  Case 5
    wday$ = "Friday"
  Case 6
    wday$ = "Saturday"
  EndSelect
  ProcedureReturn wday$
EndProcedure

Procedure.s ModifiedOn(File$)
  F1.FILETIME
  F2.FILETIME
  S1.SYSTEMTIME
  fileid.l = ReadFile(0, File$)
  GetFileTime_(fileid , #NULL, #NULL, F2)
  FileTimeToLocalFileTime_(F2, F1)
  FileTimeToSystemTime_(F1, S1)
  
  fileinfo$ = WeekDay(S1\wDayOfWeek) +" " + Str(S1\wMonth) +"/"+ Str(S1\wDay) +"/"+ Str(S1\wYear)
;  CloseFile(0)
  ProcedureReturn fileinfo$
EndProcedure

Procedure.s LastAccess(File$)
  F1.FILETIME
  F2.FILETIME
  S1.SYSTEMTIME
  fileid.l = ReadFile(0, File$)
  GetFileTime_(fileid , #NULL, F2, #NULL)
  FileTimeToLocalFileTime_(F2, F1)
  FileTimeToSystemTime_(F1, S1)
  
  fileinfo$ = WeekDay(S1\wDayOfWeek) +" " + Str(S1\wMonth) +"/"+ Str(S1\wDay) +"/"+ Str(S1\wYear)
;  CloseFile(0)
  ProcedureReturn fileinfo$
EndProcedure

Procedure.s CreatedOn(File$)
  F1.FILETIME
  F2.FILETIME
  S1.SYSTEMTIME
  fileid.l = ReadFile(0, File$)
  GetFileTime_(fileid , F2, #NULL, #NULL)
  FileTimeToLocalFileTime_(F2, F1)
  FileTimeToSystemTime_(F1, S1)
  
  fileinfo$ = WeekDay(S1\wDayOfWeek) +" " + Str(S1\wMonth) +"/"+ Str(S1\wDay) +"/"+ Str(S1\wYear)
;  CloseFile(0)
  ProcedureReturn fileinfo$
EndProcedure

If FileSize(FileToTest$) > 0
  MessageRequester("Created On", CreatedOn(FileToTest$))
  MessageRequester("Last Accessed", LastAccess(FileToTest$))
  MessageRequester("Modified On", ModifiedOn(FileToTest$))
Else
  MessageRequester("Error", "File "+FileToTest$ + " don't exist!")
EndIf
; ExecutableFormat=Windows
; FirstLine=1
; DisableDebugger
; EOF
Ce code semble marcher impec.

JL
Quand on me gonfle trop j'éclate, sinon ça va !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Et ça, ça suffirait pas???

Code : Tout sélectionner

File$ = "Change.txt"; <----- Mettre le chemin du fichier ici
hFile = ReadFile(0,File$)
If hFile
  GetFileTime_(hFile, @Creation.FILETIME,@LastAcces.FILETIME,@Write.FILETIME)
  FileTimeToSystemTime_(Creation.FILETIME,@InfoCreation.SYSTEMTIME)
  FileTimeToSystemTime_(LastAcces.FILETIME,@InfoWrite.SYSTEMTIME)
  FileTimeToSystemTime_(Write.FILETIME,@InfoAcces.SYSTEMTIME)
EndIf

Debug "Fichier créé le "+Str(InfoCreation\wDay)+"/"+Str(InfoCreation\wMonth)+"/"+Str(InfoCreation\wYear)
Debug "Modifié le "+Str(InfoWrite\wDay)+"/"+Str(InfoWrite\wMonth)+"/"+Str(InfoWrite\wYear)
Debug "Dernier accès le "+Str(InfoAcces\wDay)+"/"+Str(InfoAcces\wMonth)+"/"+Str(InfoAcces\wYear)
Chris :)
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Si et y'avais ça aussi :

Code : Tout sélectionner

Procedure.s FileTime(fichier$, typedate.l) 
    HandleFichier.l = OpenFile(2, fichier$) ; recupère le Handle du fichier avec la fonction OpenFile 
    If HandleFichier And OpenLibrary(0, "kernel32.dll") 
        CallFunction(0, "GetFileTime", HandleFichier, ct.FILETIME, lat.FILETIME, lwt.FILETIME) ; 
        Select typedate 
            Case 1 ; si typedate = 1, renvoi la date de création 
                CallFunction(0, "FileTimeToLocalFileTime", @ct, @lpLocalFileTime.FILETIME) ;pour prendre en compte l'heure d'été et d'hiver 
            Case 2 ; si typedate = 2, renvoi la date du dernier accès 
                CallFunction(0, "FileTimeToLocalFileTime", @lat, @lpLocalFileTime.FILETIME) ;pour prendre en compte l'heure d'été et d'hiver 
            Default ; si typedate = autre chose, renvoi automatiquement la date de modification 
                CallFunction(0, "FileTimeToLocalFileTime", @lwt, @lpLocalFileTime.FILETIME) ;pour prendre en compte l'heure d'été et d'hiver 
        EndSelect 
        CallFunction(0, "FileTimeToSystemTime", @lpLocalFileTime, @st.SYSTEMTIME) ;pour convertir la date dans le format systemtime 
        DateFichier$ = Space(256) 
        HeureFichier$ = DateFichier$ 
        GetDateFormat_(2048, 0, @st, "dd'/'MM'/'yyyy", @DateFichier$, 254) ; donne la dte du fichier 
        GetTimeFormat_(2048, #TIME_FORCE24HOURFORMAT, @st, 0, @HeureFichier$, 254) ; donne l'heure du fichier 
        DateFichier$ = DateFichier$ + "  " + HeureFichier$ ; on assemble l'année et l'heure 
        CloseFile(2) 
        ProcedureReturn DateFichier$ ; renvoi la date du fichier 
    Else 
        ProcedureReturn "?" 
    EndIf 
EndProcedure

MessageRequester("Infos",FileTime("Infos Dates Fichier.pb",1),1)
JL
Quand on me gonfle trop j'éclate, sinon ça va !
LavaLava

Message par LavaLava »

J'en suis un peu surpris,
mais je vous en remercie, encore plus, pour la rapidité de vos réponses !
Répondre