md21
Messages postés32Date d'inscriptionmercredi 10 janvier 2007StatutMembreDernière intervention 1 septembre 2015
-
5 août 2008 à 10:10
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
5 août 2008 à 14:11
Bonjour,
voici mon problème, je cherche à récupérer l'information de la taille des fichiers.
Jusque là c'est très simple, l'extrait de code suivant va chercher la taille de tous les fichiers contenus dans un dossier désigné en cliquant dans une arborescence et les range dans dans une variable tableau à une dimension. (j'ai mis le minimum de code pour ma question mais je récupère bien sûr le nom, la date , les attributs, ...).
Ce qui ne va pas, c'est que fichier.Size est un integer donc limité à 2 147 483 647 (quelque chose comme ça), donc à des fichiers de environ 2 Go. J'ai pu constaté que les valeurs sont effectivement n'importe quoi pour les très gros fichiers (> 2 Go), c'est pourquoi j'ai essayé de passer en Int64 ma variableVF_TAILLE mais cela ne change rien vu que le problème vient entièrement de Fichier.Size.
Du coup, je ne sais plus trop comment faire. Je sais que cette question peut paraître très simple mais je n'en trouve pas la réponse... merci par avance
ce code a été écrit avec delphi 6 standard.
var
VF_TAILLE: array of Int64;
Pointeur: Word;
Fichier: TSearchRec;
begin
Try
RefDossier := TREE.Path;
RefDossier := IncludeTrailingPathDelimiter(RefDossier); {très important}
if FindFirst(RefDossier + '*.*',faAnyFile,Fichier) = 0 Then
Begin
Repeat
if (Fichier.Attr And faDirectory) = 0 Then
Try
Inc(Pointeur);
SetLength(VF_TAILLE,Pointeur);
VF_TAILLE[Pointeur - 1] := Int64(Fichier.Size);
Except
end;
Until FindNext(Fichier) <> 0;
FindClose(Fichier);
end;
Except
end;
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 5 août 2008 à 11:12
Salut,
Dans la JCL, tu as cette fonction :
function GetSizeOfFile(const FileName: string): Int64;
var
Handle: THandle;
FindData: TWin32FindData;
Size: TULargeInteger;
begin
Result := 0;
Handle := FindFirstFile(PChar(FileName), FindData);
if Handle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
Size.LowPart := FindData.nFileSizeLow;
Size.HighPart := FindData.nFileSizeHigh;
Result := Size.QuadPart;
end
else
RaiseLastOSError;
end;
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 5 août 2008 à 11:13
Salut !
Il faut "juste" que tu remplaces ta ligne "VF_TAILLE[Pointeur - 1] := Int64(Fichier.Size);" en utilisant la fonction GetFileSizeEx() [windows xp/vista uniquement].
Il faut pour cela que tu ouvres le fichier via CreateFile() , que tu récupères la taille, puis que tu le refermes via CloseHandle().