Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Größe auf dem Datenträger ermitteln. (https://www.delphipraxis.net/32125-groesse-auf-dem-datentraeger-ermitteln.html)

Sharky 20. Okt 2004 08:51

Re: Größe auf dem Datenträger ermitteln.
 
Zitat:

Zitat von Steve
Nunja, dann funzt die Lösung mit GetCompressedFileSize also wohl nur ab NT aufwärts

Hai Stephan ;-)

ich habe das ganze jetzt mal erweitert:
Delphi-Quellcode:
function GetRealFileSize(const aFileName: string): Cardinal;
  {**********************************************************}
  // Diese Funktion ist von Daniel B. aus der Code-Library
  // [url]http://www.delphipraxis.net/post52937.html#52937[/url]
  // Es wird geprüft ob ein Windows auf NT-Basis läuft
  function NTSystem: Boolean;
  var
    OsVinfo: TOSVERSIONINFO;
  begin
    result := False;
    ZeroMemory(@OsVinfo, SizeOf(OsVinfo));
    OsVinfo.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO);
    if GetVersionEx(OsVinfo) then
    begin
      if OsVinfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
      begin
        result := True;
      end
    end;
  end;
  {**********************************************************}
  // Diese Funktion ist von Luckie aus der Code-Library
  // [url]http://www.delphipraxis.net/post191286.html#191286[/url]
  // Ermittelt die Grösse einer Datei
  function GetFileSize(const szFile: String): 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*(MAXDWORD))+wfd.nFileSizeLow;
    windows.FindClose(fFile);
  end;
  {**********************************************************}

var
  ClusterSize: Cardinal;
  SectorPerCluster: Cardinal;
  BytesPerSector: Cardinal;
  NumberOfFreeClusters: Cardinal;
  TotalNumberOfClusters: Cardinal;
  filesize: Cardinal;
  realsize: Cardinal;
  drive: string;
begin
  drive := ExtractFileDrive(aFileName) + '\';
  if (NTSystem) then
  begin
    filesize := GetCompressedFileSize(PAnsiChar(aFileName), @filesize);
  end
  else
  begin
    filesize := GetFileSize (aFileName);
  end;
  realsize := 0;
  if (filesize <> $FFFFFFFF) then
  begin
    GetDiskFreeSpace(PChar(drive ), SectorPerCluster, BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters);
    ClusterSize := SectorPerCluster * BytesPerSector;
    if not ((filesize mod clustersize) = 0) then
    begin
      realsize := ((filesize div clustersize) * clustersize) + clustersize
    end
    else
    begin
      realsize := filesize;
    end;
  end;
  result := realsize;
end;

Steve 20. Okt 2004 09:17

Re: Größe auf dem Datenträger ermitteln.
 
Siehe auch Dateigröße auf Datenträger bestimmen für einen etwas anderen Lösungsansatz :) :angel:


Gruß
Stephan :dance:

Sharky 20. Okt 2004 09:41

Re: Größe auf dem Datenträger ermitteln.
 
Zitat:

Zitat von Steve
Siehe auch Dateigröße auf Datenträger bestimmen für einen etwas anderen Lösungsansatz ...

*Grummel*
Warum habe ich das übersehen? Da hätte ich mir die Arbeit heute sparen können ;-)

Steve 20. Okt 2004 09:45

Re: Größe auf dem Datenträger ermitteln.
 
Zitat:

Zitat von Sharky
Da hätte ich mir die Arbeit heute sparen können ;-)

:pale: 'Tschuldigung :duck:
Wollt's noch hier rein posten, habs aber wohl gestern bissl vergessen... :mrgreen:

Gruß
Stephan :dance:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 Uhr.
Seite 2 von 2     12   

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