Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   [Linux] Dateigröße ermitteln mit Lazarus (https://www.delphipraxis.net/135831-%5Blinux%5D-dateigroesse-ermitteln-mit-lazarus.html)

MisterNiceGuy 18. Jun 2009 15:06


[Linux] Dateigröße ermitteln mit Lazarus
 
Was unter Windows kinderleicht ist, stellt sich unter Linux als wahre Herausforderung raus.
Ich würde gerne die Größe einer Datei ermitteln, weiß aber nicht wie. Hat einer dafür eine Lösung? :)

Fridolin Walther 18. Jun 2009 15:12

Re: [Linux] Dateigröße ermitteln mit Lazarus
 
Du kannst entweder die entsprechende Linux API verwenden (stat) dafür oder wenn es "plattformunabhängig" sein soll:
Delphi-Quellcode:
function GetFileSize(FileName : string) : Integer;
var
  f : file;
  OldFileMode : Integer;
begin
  OldFileMode := FileMode;
  FileMode := 0;
  AssignFile(f, FileName);
  Reset(f, 1);
  Result := FileSize(f);
  CloseFile(f);
  FileMode := OldFileMode;
end;
Alternative ohne die Datei wirklich zu öffnen basierend auf dem Standard Pascal Befehlssatz:
Delphi-Quellcode:
function GetFileSizeWithoutOpening(FileName : string) : Int64;
var
  SearchRecord : TSearchRec;
begin
  if FindFirst(FileName, faAnyFile, SearchRecord) = 0
    then
      begin
        Result := SearchRecord.Size;
        FindClose(SearchRecord);
      end
    else
      Result := 0;
end;
Fehlerhandling darf der Threadersteller selbst bauen.

theodp 19. Jun 2009 19:24

Re: [Linux] Dateigröße ermitteln mit Lazarus
 
Warum nicht einfach

function FileSize(const Filename: string): int64;

in FileUtil ?

himitsu 19. Jun 2009 19:46

Re: [Linux] Dateigröße ermitteln mit Lazarus
 
Zitat:

Zitat von theodp
function FileSize(const Filename: string): int64;

weil das eine WinAPI ist und unter Linux nicht existiert :zwinker:

wegen des Standards :angel:
Code:
function GetFileSizeWithoutOpening(FileName : string) : Int64;
begin
  ...
    else
      Result := [color=#ff0000]-1[/color];

theodp 20. Jun 2009 21:37

Re: [Linux] Dateigröße ermitteln mit Lazarus
 
Zitat:

Zitat von himitsu
weil das eine WinAPI ist und unter Linux nicht existiert :zwinker:

Wie kommst du denn auf die Idee?
FileUtil ist Cross-Platform und diese Fkt. auch.

Delphi-Quellcode:
function FileSize(const Filename: string): int64;
{$IFDEF Unix}
var
  st: baseunix.stat;
{$ELSE}
var
  FileInfo: TSearchRec;
{$ENDIF}
begin
  {$IFDEF Unix}
  if not fpstat(pointer(Filename),st)>=0 then
    exit(-1);
  Result:=st.st_size;
  {$ELSE}
  {$IFDEF WINCE}
  FileInfo.Name:=UTF8Decode(Filename);
  {$ELSE}
  FileInfo.Name:=UTF8ToSys(Filename);
  {$ENDIF}
  FileInfo.FindHandle:=Windows.FindFirstFile(Windows.LPTSTR(FileInfo.Name),FileInfo.FindData);
  if FileInfo.FindHandle=Windows.Invalid_Handle_value then begin
    Result:=-1;
    exit;
  end;
  Result:=(int64(FileInfo.FindData.nFileSizeHigh) shl 32)+FileInfo.FindData.nFileSizeLow;
  Windows.FindClose(FileInfo.FindHandle);
  {$ENDIF}
end;

mimi 7. Aug 2009 18:49

Re: [Linux] Dateigröße ermitteln mit Lazarus
 
Notfalls kannst du auch noch über TFileStream gehen....

mkinzler 7. Aug 2009 18:51

Re: [Linux] Dateigröße ermitteln mit Lazarus
 
Oder df aufrufen


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.

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