Date d'un fichier sans ouvrir le fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Date d'un fichier sans ouvrir le fichier

Message par olivier »

Salut à tous les programmeurs, et tout ceux qui aident les débutants dans leur tache.... :P
Voila , j'ai besoin de connaitre la date de fichier créer, j'ai recherché dans le forum et j'ai trouvé coment faire (Merci Nico)

Je n'ai pas bien compris celui là, mais j'ai l'impression qui ne résouderas pas mon problème! (Merci Denis de me contredire si je me trompe)
Code:
#Date = "dd'/'MM'/'yyyy"

FileTimeToLocalFileTime_(FileInfos\ftLastWriteTime, @OutPut.l)
FileTimeToSystemTime_(@OutPut, @OutPutSystemTime.SYSTEMTIME)
GetDateFormat_(2048, 0, @OutPutSystemTime, #Date, @String1, 256)
GetTimeFormat_(2048, #TIME_FORCE24HOURFORMAT, @OutPutSystemTime, 0, @FileDateTime, 256)
String1 + " " + FileDateTime

Le problèeme est qu'avec ton code (Nico) je suis obligé d'ouvrir le fichier !
Et lorsqu'il est en lecture seule il ne veut pas !!

Les solutions
1°) Mettre l'option qui va bien pour pouvoir ouvrir un fichier en lecture seul
2°) Tester le fichier, si il est en lecture seul changer son attribut et le remettre apres
3°) Obtenir la date autrement....

PS : Je n'ai besoin que de la date de dernière modification dans le but d'une synchronisation de deux répertoire.

Merci d'avance pour votre aide et longue vie à Purebasic !!!!
:D
Vive le temps libre !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Date d'un fichier sans ouvrir le fichier

Message par Anonyme2 »

olivier a écrit :
Je n'ai pas bien compris celui là, mais j'ai l'impression qui ne résouderas pas mon problème! (Merci Denis de me contredire si je me trompe)
Code:
#Date = "dd'/'MM'/'yyyy"

FileTimeToLocalFileTime_(FileInfos\ftLastWriteTime, @OutPut.l)
FileTimeToSystemTime_(@OutPut, @OutPutSystemTime.SYSTEMTIME)
GetDateFormat_(2048, 0, @OutPutSystemTime, #Date, @String1, 256)
GetTimeFormat_(2048, #TIME_FORCE24HOURFORMAT, @OutPutSystemTime, 0, @FileDateTime, 256)
String1 + " " + FileDateTime
:D

Salut Olivier,

le code ci-dessus est faux :oops: car la variable OutPut.l ne doit pas être de type long mais basée sur la structure Filetime (pourtant le code fonctionne avec le débugger activé mais plante sans le débugger).

Code : Tout sélectionner

 FileTimeToLocalFileTime_(FileInfos\ftLastWriteTime, @OutPut.l)
sinon ce code permet de récupérer les dates des fichiers et l'heure au format local c'est-à-dire en tenant compte de l'heure d'été/hiver.

Mais je ne suis pas sur (je n'ai pas testé) que ça fonctionne avec des fichiers ouverts (dépend surement du type d'ouverture)

Sinon j'ai posté un code ici (c'est un peu long) sur le forum ou j'énumère le contenu d'un dossier avec la date des fichiers. J'ai du utiliser l'API windows CreateFile_ pour récupérer le handle de certains fichiers qui n'apparaissaient pas dans la liste avec la commande PureBasic.

J'espère que ça va t'aider (le code est un peu long et pas forcément simple à comprendre)

La procédure qui t'intéresse c'est LectureDossier()
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Salut Olivier et bienvenue sur le Forum,

Le code que j'ai posté fonctionne, seulement pour ouvrir le fichier, j'utilise OpenFile qui est une fonction pour Lecture et écriture sur fichier, alors que si tu le remplaces par ReadFile, il n'y aura pas de problème car cette fonction ne peut être utilisé pour modifier le fichier.

Donc en résumé, remplace OpenFile par ReadFile.


:)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:) salut

tu peux aussi utiliser

Code : Tout sélectionner

ExplorerListGadget

qui te listera les fichiers que tu veux avec les renseignements
qui t'intéressent. Avec

Code : Tout sélectionner

EventType
tu pourras agir
sur les éléments de ta liste.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Message par olivier »

Je l'ai révée et Purebasic (enfin son concépteur) la réalisé.
:D
Bravo les gars, le logiciel est simple et puissant, et les gars du forum sont rapide et éfficace !!!!! 8)
Merci à Nico qui me donne satisfaction, et oui Read à la place de Write et le tour et jouer :D

Denis, ce code est un peu tres tout plein pas clair, mais j'aimerais bien voir ton code, celui que tu as poster sur le forum....mais ou ??? 8O Merci :wink:

Et toi Jacobus, sa pourrais être super puissant, mais j'ai l'impression que je n'ariverais pas au bout, c'est à dire à comparer deux répertoires (+sous répertoire) dans le but de les synchronisées, j'ai l'impression que je n'aurais que l'affichage du contenu mais que je ne peut pas le mettre dans des variables. Si je me trompe, merci de prendre le temps de m'expliquer.

Merci à tous, je suis débloqué ! :D
Vive le temps libre !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Excuses-moi, j'ai oublié le lien :oops:


le voici

http://purebasic.hmt-forum.com/viewtopi ... createfile
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Pour synchroniser 2 fichiers, un CompareFileTime_ me semble plus approprié et plus rapide car on n'a pas besoin de convertir la date

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Ce code permet de comparer la date de 2 fichiers afin de connaître le plus récent, utile pour faire un logiciel de sauvegarde ou un synchroniseur

Procedure.l CompareFileTime(File1.s, File2.s)
  Protected Resultat.l
  Resultat = 0
  HandleFichier1 = OpenFile(100, File1) ; recupère le Handle du fichier avec la fonction OpenFile
  If HandleFichier1
    HandleFichier2 = OpenFile(101, File2) ; recupère le Handle du fichier avec la fonction OpenFile
    If HandleFichier2 ; si les 2 fichiers sont ouverts
      GetFileTime_(HandleFichier1, @ct1.FILETIME, @lat1.FILETIME, @lwt1.FILETIME) ; récupère la date du fichier
      GetFileTime_(HandleFichier2, @ct2.FILETIME, @lat2.FILETIME, @lwt2.FILETIME)
      Resultat = CompareFileTime_(@lwt1, @lwt2) ; compare les dates
      CloseFile(101)
    EndIf
    CloseFile(100)
    ProcedureReturn Resultat
  EndIf
EndProcedure


;- Test
Fichier1.s = OpenFileRequester("Ouvrir fichier 1", "", "Fichier|*.*", 0)
Fichier2.s = OpenFileRequester("Ouvrir fichier 2", "", "Fichier|*.*", 0)

If Fichier1 And Fichier2
  
  Select CompareFileTime(Fichier1.s, Fichier2.s)
    Case -1
      MessageRequester("", "Le fichier le plus récent est :" + Chr(10) + Fichier2, 0)
    Case 0
      MessageRequester("", "Les deux fichiers ont la même date", 0)
    Case 1
      MessageRequester("", "Le fichier le plus récent est :" + Chr(10) + Fichier1, 0)
  EndSelect
  
EndIf
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)]
Répondre