AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Filegrösse von Datei aus Opendialog
Thema durchsuchen
Ansicht
Themen-Optionen

Filegrösse von Datei aus Opendialog

Ein Thema von codenoob · begonnen am 10. Jun 2017 · letzter Beitrag vom 10. Jun 2017
Antwort Antwort
codenoob
(Gast)

n/a Beiträge
 
#1

Filegrösse von Datei aus Opendialog

  Alt 10. Jun 2017, 01:08
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Filegrösse von Datei aus Opendialog

  Alt 10. Jun 2017, 02:33
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.
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?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Jun 2017 um 02:58 Uhr)
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#3

AW: Filegrösse von Datei aus Opendialog

  Alt 10. Jun 2017, 04:49
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;

Geändert von t.roller (10. Jun 2017 um 04:59 Uhr)
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#4

AW: Filegrösse von Datei aus Opendialog

  Alt 10. Jun 2017, 12:57
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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