Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateigröße ermitteln ohne Datei zu öffnen (https://www.delphipraxis.net/64563-dateigroesse-ermitteln-ohne-datei-zu-oeffnen.html)

robinWie 5. Mär 2006 10:54


Dateigröße ermitteln ohne Datei zu öffnen
 
Hi,

ich suche die möglichkeit die Dateigröße zu ermitteln ohne die Datei zu öffnen.
In der Suche habe ich nichts gefunden und ich kenne bislang nur diese möglichkeit

Delphi-Quellcode:
var F: File
begin
 Assign(F,FileListBox1.FileName);
 Reset(F);
 Label1.Caption:=IntToStr(FileSize(F));
 ...
end;

marabu 5. Mär 2006 11:05

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Hallo Robin,

so könnte das funktionieren:

Delphi-Quellcode:
function FileSize(fn: TFileName): Int64;
var
  sr: TSearchRec;
begin
  if FindFirst(fn, faArchive, sr) = 0 then
  begin
    with sr.FindData do
      Result := nFileSizeHigh shl 32 + nFileSizeLow;
    FindClose(sr);
  end;
end;
Grüße vom marabu

Hawkeye219 5. Mär 2006 11:56

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Zwei kleine Korrekturen:

1.) Falls die Datei nicht existiert, ist das Funktionsergebnis undefiniert.
2.) Das Schieben eines 32-Bit-Wertes um 32 Bits nach links löscht eigentlich nur den Wert. :wink:

Mein Vorschlag:

Delphi-Quellcode:
function FileSize(fn: TFileName): Int64;
var
  sr: TSearchRec;
begin
  if FindFirst(fn, faArchive, sr) = 0 then
  begin
    with sr.FindData do
      Result := Int64(nFileSizeHigh) shl 32 + nFileSizeLow;
    FindClose(sr);
  end
  else
    Result := 0;
end;

DP-Maintenance 5. Mär 2006 11:59

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "VCL / WinForms / Controls" nach "Object-Pascal / Delphi-Language" verschoben.
Ist hier besser aufgehoben.

marabu 5. Mär 2006 12:38

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Danke für das Korrekturlesen. Als Result verwende ich dann lieber -1, da 0 eine legitime Größe für eine existierende Datei ist.

Schönes Wochenende

marabu

Hawkeye219 5. Mär 2006 13:03

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Stimmt, so ist's besser :thumb:

Gruß,

Hawkeye

Luckie 5. Mär 2006 13:31

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Meine Version:
Delphi-Quellcode:
function GetFileSize(szFile: PChar): Int64;
var
  fFile            : THandle;
  wfd              : TWIN32FINDDATA;
begin
  result := 0;
  if not FileExists(szFile) then exit;
  fFile := FindFirstfile(pchar(szFile), wfd);
  if fFile = INVALID_HANDLE_VALUE then exit;
  result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow;
  windows.FindClose(fFile);
end;

marabu 5. Mär 2006 14:04

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Hallo Michael, du non-VCL-Fetischist,

wenn du FileExists() raus nimmst und Result mit -1 initialisierst (siehe oben), dann nenne ich deinen Code elegant.

Freundliche Grüße vom marabu

Daniel G 5. Mär 2006 14:08

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Zitat:

Zitat von marabu
wenn du FileExists() raus nimmst

Erklärst du kurz, warum? Oder hat das mehr "ästhetische" Gründe? :mrgreen:

ichbins 5. Mär 2006 14:11

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
weil fileexists in der sysutils steht und die nicht nonVCL-kompatibel ist ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz