Savoir plus

cs_dahman Messages postés 40 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 31 mars 2006 - 9 juil. 2004 à 11:52
Mezerette Messages postés 8 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 19 décembre 2005 - 23 févr. 2005 à 10:55
salut
est ce c possible d 'extraire les propiétés d'un repertoire ou d'un fichier exp:date de création date de modification et taille
merci a tous :)

4 réponses

cs_mike255 Messages postés 120 Date d'inscription mercredi 14 août 2002 Statut Membre Dernière intervention 26 mai 2007
14 juil. 2004 à 15:06
Tu peux utiliser la fonction API GetFileInformationByHandle pour avoir toutes les informations en une seule fois. Voici un exemple pour afficher la taille en octect et la date de création du fichier c:/PPP.txt .

procedure TMainForm.Button3Click(Sender: TObject);
var hwdfile:cardinal; 
informations : BY_HANDLE_FILE_INFORMATION;

begin
try
hwdfile := CreateFile('c:/PPP.txt',GENERIC_READ,
  0, 0, OPEN_EXISTING, 0, 0);
GetFileInformationByHandle(hwdfile, informations);
//affiche la taille en octets
showmessage(inttostr(informations.nFileSizeLow));
//affiche la date de création
showmessage(DateToStr( FileTimeToDateTime( informations.ftCreationTime)));
finally
CloseHandle(hwdfile);
end;

end;

function FileTimeToDateTime(const FileTime: TFileTime): TDateTime;
const
FileTimeStep: Extended = 24.0 * 60.0 * 60.0 * 1000.0 * 1000.0 * 10.0;
FileTimeBase      = -109205.0;
begin
  Result := Int64(FileTime) / FileTimeStep;
  Result := Result + FileTimeBase;
end;



La fonction FileTimeToDateTime qui permet de convertir une date au format FileTime au format TDateTime est tirée de l'unité JclDateTime de la JCL.
0
Mezerette Messages postés 8 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 19 décembre 2005
22 févr. 2005 à 15:22
Et comment fait-on pour récupérer les propriétés d'un répertoire ? (en particulier sa date de création)

Sophie.
0
cs_mike255 Messages postés 120 Date d'inscription mercredi 14 août 2002 Statut Membre Dernière intervention 26 mai 2007
23 févr. 2005 à 10:17
Salut sophie,



Apparement, on ne peux pas utiliser CreateFile pour avoir la main sur un répertoire. Il faut utiliser FindFirstFile.



Rm: j'ai modifié la fonction FileTimeToDateTime pour quelle affiche correctement l'heure locale.



function FileTimeToDateTime(const FileTime: TFileTime): TDateTime;

const

FileTimeStep: Extended = 24.0 * 60.0 * 60.0 * 1000.0 * 1000.0 * 10.0;

FileTimeBase = -109205.0;

var

LocalFileTime : TFileTime;

begin

// converti filetime en localfiletime (heure locale)

FileTimeToLocalFileTime(FileTime,LocalFileTime);

Result := Int64(LocalFileTime) / FileTimeStep;

Result := Result + FileTimeBase;

end;



procedure TForm1.Button1Click(Sender: TObject);

var directoryhandle:cardinal;

findfiledata : _WIN32_FIND_DATAA ;



begin

directoryhandle := FindFirstFile('C:\PPP',findfiledata);

try

if (directoryhandle<>INVALID_HANDLE_VALUE) then

showmessage(DateTimeToStr(FileTimeToDateTime(findfiledata.ftCreationTime)));

finally

//FindClose(directoryhandle);

end;



end;



Rm: Je veux utiliser FindClose pour libérer la mémoire allouée par
FindFirstFile mais delphi utilise la fonciton de Sysutils qui
demande un tsearchrec à la place de celle de l'api qui demande un
handle..

Télécharger Outlook Skype Plugin et mes autres réalisations sur mon site
http://s3ven.freesurf.fr
0
Mezerette Messages postés 8 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 19 décembre 2005
23 févr. 2005 à 10:55
Cela fonctionne bien, merci.
J'ai cependant fait une petite simplification dans la fonction FileTimeToDateTime, voilà comment j'ai fait :

function FileTimeToDateTime(const FileTime: TFileTime): TDateTime;
var SystemTime:TSystemTime;
begin
FileTimeToSystemTime(FileTime, SystemTime);
Result:= SystemTimeToDateTime(SystemTime);
end;

procedure TForm1.Button1Click(Sender: TObject);
var directoryhandle:cardinal; findfiledata : TWin32FindData;
begin
Try
directoryhandle:= FindFirstFile(PChar('C:\PPP'),findfiledata);
if directoryhandle<>INVALID_HANDLE_VALUE then
showmessage(DateTimeToStr(FileTimeToDateTime(findfiledata.ftCreationTime));
finally
FindClose(directoryhandle);
end;
end;

il faut rajouter Windows dans les uses.
(je développe en Delphi3, cela explique peut-être le PChar en plus dans FindFirstFile !)

Sophie.
0
Rejoignez-nous