Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Filegrösse von Datei aus Opendialog (https://www.delphipraxis.net/193014-filegroesse-von-datei-aus-opendialog.html)

codenoob 10. Jun 2017 01:08

Filegrösse von Datei aus Opendialog
 
Hi Delphianer.

Ich öffne mitels Opendialog eine Datei und möchte die Dateigrösse der Datei in eine Litvie schreiben.
Delphi-Quellcode:

Li.SubItems.Add(GetFileSize(ClientForm.opendialog1.Files[i]));
Delphi-Quellcode:
function GetFileSize(FileName: string): integer;
var
  Handle: THandle;
begin
  Result := 0;
  Handle := CreateFile(pchar(FileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if Handle <> INVALID_HANDLE_VALUE then Result := windows.GetFileSize(Handle,nil);
  CloseHandle(handle);
end;
Allerdings bekomme ich da immer die Fehlermeldung: Inkompatible Typen: NativeUInt und String;

himitsu 10. Jun 2017 02:33

AW: Filegrösse von Datei aus Opendialog
 
Zitat:

Zitat von codenoob (Beitrag 1374123)
Delphi-Quellcode:
li.SubItems.Add(GetFileSize(ClientForm.opendialog1.Files[i]));

Wenn du dein CodeInsight fragst, dann sagt es dir bestimmt, dass dieser Aufruf nicht DEIN GetFileSize findet, sondern das der Windows-Unit. :stupid:
Da würde ich fast drauf wetten.

PS: THandle ist nur ein Alias und aktuell ist es intern ein NativeUInt.
Zitat:

Inkompatible Typen: THandle und String

Reihenfolge der Units im Uses ändern (ohne "overload" wird immer der letzte Implementation verwendet, also jene, welche am Nächsten an der Aufrufstelle dran ist)
oder mit Namespace aufrufen.
Bzw. deine Deklaration vom GetFileSize liegt natürlich auch vor dem Aufruf?

t.roller 10. Jun 2017 04:49

AW: Filegrösse von Datei aus Opendialog
 
Ich nehme folgende Version:
(ist schneller: öffnet kein File, Ergebnis auch für grosse Files geeignet: INT64)
Delphi-Quellcode:
function GetFileSizeEx(const AFileName: string): Int64;
var F: TSearchRec;
begin
  Result := -1;
  if FindFirst(AFileName, faAnyFile, F) = 0 then
  begin
    try Result := F.FindData.nFileSizeLow or (F.FindData.nFileSizeHigh shl 32);
    finally SYSTEM.SysUtils.FindClose(F); end;
  end;
end;

//Alternative
function GetFileSize(const AFileName: string): Int64;
var
  SearchRec: TSearchRec;
  OldMode: Cardinal;
  Size: TULargeInteger;
begin
  Result := -1;
  OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    if FindFirst(AFileName, faAnyFile, SearchRec) = 0 then
    begin
      Size.LowPart := SearchRec.FindData.nFileSizeLow;
      Size.HighPart := SearchRec.FindData.nFileSizeHigh;
      Result := Size.QuadPart;
      SYSTEM.SysUtils.FindClose(SearchRec);
    end;
  finally
    SetErrorMode(OldMode);
  end;
end;

SneakyBagels 10. Jun 2017 12:57

AW: Filegrösse von Datei aus Opendialog
 
Oder so
Delphi-Quellcode:
function getFileSizeA(const aFileName: string): Int64;
var
 SR: TSearchRec;
begin
 Result := 0;

 if not FileExists(aFileName) then
  Exit;

 if FindFirst(aFileName, faAnyFile and not faDirectory, SR) = 0 then
  try
   Result := SR.Size;
  finally
   System.SysUtils.FindClose(SR)
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.

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