AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dateigröße ermitteln ohne Datei zu öffnen
Thema durchsuchen
Ansicht
Themen-Optionen

Dateigröße ermitteln ohne Datei zu öffnen

Ein Thema von robinWie · begonnen am 5. Mär 2006 · letzter Beitrag vom 9. Mai 2014
Antwort Antwort
Seite 2 von 4     12 34      
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

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

  Alt 5. Mär 2006, 14:13
Hallo Daniel,

wer die Implementierung von FileExists() kennt, der weiß, dass alle Sparversuche in diesem Code von Michael durch diesen einen Befehl wieder zunichte gemacht werden. Da ist dann mein VCL-Code noch sparsamer. FileExists() arbeitet intern mit FileAge() und dieses wiederum mit einem eigenen FindFirst-FindClose-Zyklus. Und außerdem wird die Prüfung von FindFirstFile() intern mit erledigt und das Ergebnis über den Rückgabewert signalisiert.

marabu
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#12

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

  Alt 5. Mär 2006, 14:25
Zitat von marabu:
FileExists() arbeitet intern mit FileAge() und dieses wiederum mit einem eigenen FindFirst-FindClose-Zyklus. Und außerdem wird die Prüfung von FindFirstFile() intern mit erledigt und das Ergebnis über den Rückgabewert signalisiert.
Ah, ok. Bei der PE sind die Sourcen ja nicht mit dabei, daher hatte ich auch keine Chance, mir das genauer anzusehen.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

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

  Alt 5. Mär 2006, 14:34
Aber dann sollte man noch mit den Attributen in der FINDDATA-Struktur überprüfen, ob es sich wirklich um eine Datei handelt (und nicht um ein Verzeichnis o.ä.)
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

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

  Alt 5. Mär 2006, 20:36
Ups, das gehört noch dazu:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : FileExists
// Comment : -

function FileExists(const FileName: string; dir: boolean = false): Boolean;
var
  hidate, lodate : word;
  Handle : THandle;
  FindData : TWin32FindData;
  LocalFileTime : TFileTime;

type
  LongRec = packed record
    Lo, Hi: Word;
  end;

  function SubFileExists: Boolean;
  begin
    FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
    result := FileTimeToDosDateTime(LocalFileTime, HiDate, LoDate);
  end;
begin
  result := false;
  Handle := FindFirstFile(PChar(FileName), FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(Handle);
    case dir of
      TRUE: if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then result := SubFileExists;
      FALSE: if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then result := SubFileExists;
    end;
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

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

  Alt 5. Mär 2006, 21:51
Durch das FileExists rufst du so zwei mal hintereinander FindFirstFile für dieselbe Datei auf - du musst doch in GetFileSize nach dem FindFirstFile einfach nur noch auf FILE_ATTRIBUTE_DIRECTORY testen.
Delphi-Quellcode:
function GetFileSize(szFile: PChar): Int64;
var
  fFile : THandle;
  wfd : TWIN32FINDDATA;
begin
  result := -1;
  fFile := FindFirstfile(pchar(szFile), wfd);
  if fFile = INVALID_HANDLE_VALUE then exit;
  if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then exit;
  result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow;
  windows.FindClose(fFile);
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#16

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

  Alt 5. Mär 2006, 22:12
...aber dabei keine neuen Speicherlöcher erzeugen!

Delphi-Quellcode:
function GetFileSize(szFile: PChar): Int64;
var
  fFile : THandle;
  wfd : TWIN32FINDDATA;
begin
  result := -1;
  fFile := FindFirstfile(pchar(szFile), wfd);
  if fFile = INVALID_HANDLE_VALUE then exit;
  if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow;
  windows.FindClose(fFile);
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

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

  Alt 5. Mär 2006, 22:25
Wo war bei Flocke das Speicherleck?

@Flocke: Die Routinen sind schon etwas älter und hab esie lange nicht gebraucht, deswegen habe ich sie mir schon lange nicht mehr angeguckt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#18

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

  Alt 5. Mär 2006, 22:38
Zitat von Luckie:
Wo war bei Flocke das Speicherleck?
Nach FindFirstFile sollte immer ein FindClose folgen, was bei Flocke aufgrund des exits nicht mehr ausgeführt werden würde. Ich denke, das meinte Hawkeye.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

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

  Alt 5. Mär 2006, 23:02
Zitat von Matze:
Zitat von Luckie:
Wo war bei Flocke das Speicherleck?
Nach FindFirstFile sollte immer ein FindClose folgen, was bei Flocke aufgrund des exits nicht mehr ausgeführt werden würde. Ich denke, das meinte Hawkeye.
Nein:
Zitat:
If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose.
If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.
Wenn sie fehlschlägt gibt es also kein Handle, das man schließen könnte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#20

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

  Alt 5. Mär 2006, 23:05
Ich dachte, ich hätte meinen Beitrag editiert und ein "(soweit ich weiß)" eingefügt, so klingt es, als sei ich fest davon überzeugt gewesen.

Zitat von Luckie:
Wenn sie fehlschlägt gibt es also kein Handle, das man schließen könnte.
Oh, wieder was gelernt, dann kann ich auch kein Speicherleck erkennen. Thx für die Info, werde ich mir merken.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 06:45 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