AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dateigröße ermitteln, während die Datei ausgeführt wird???
Thema durchsuchen
Ansicht
Themen-Optionen

Dateigröße ermitteln, während die Datei ausgeführt wird???

Ein Thema von romber · begonnen am 9. Sep 2005 · letzter Beitrag vom 9. Sep 2005
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Dateigröße ermitteln, während die Datei ausgeführt wird???

  Alt 9. Sep 2005, 19:44
Hallo!

folgende Funktion benutze ich, wenn ich Größe einer Datei auf der Fesplatte ermitteln möchte:

Delphi-Quellcode:
function CheckFileSize(aFilename: string): integer;
var
   f: file of Byte;
   size: Longint;
begin
 AssignFile(f, aFilename);
 Reset(f);
 try
   size := FileSize(f);
 finally
   CloseFile(f);
 end;
 Result := size;
end;
Leider hängt die Funktion, wenn die zu prüfende EXE-Datei gerade läuft. Liegt sicher an AssignFile, weil die Datei bereits "besetzt" ist. Gibt es eine alternative Funktion, die mein Problem löst?
  Mit Zitat antworten Zitat
Karl-Heinz

Registriert seit: 12. Nov 2003
Ort: Waldkirch
12 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: Dateigröße ermitteln, während die Datei ausgeführt wird?

  Alt 9. Sep 2005, 20:19
So gehts ohne Angrabbeln der Datei mit WinAPI:

Delphi-Quellcode:
Function WinFilesize(afile: string): integer;

Var
  tmpW32FD : WIN32_FIND_DATA;
  FindHandle : THandle;
Begin
  FindHandle := FindFirstFile(PCHAR(afile), tmpW32FD);
  If FindHandle <> INVALID_HANDLE_VALUE Then
  Begin
    Result := (tmpW32FD.nFileSizeHigh Shl 32) +
      tmpW32FD.nFileSizeLow;
    FindClose(FindHandle);
  End Else
    Result := 0;
End;
Bis denn,
Karl-Heinz

[edit=Luckie]Wir haben hier Delphi-Tags. Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Karl-Heinz

Registriert seit: 12. Nov 2003
Ort: Waldkirch
12 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Dateigröße ermitteln, während die Datei ausgeführt wird?

  Alt 9. Sep 2005, 20:23
Oder noch einfacher:

Delphi-Quellcode:
function myfilesize(afile: string): integer;
var
  FileHandle: THandle;
begin
  FileHandle := FileOpen(FFileName, fmOpenRead or fmShareDenyWrite);
  result := -1; // Fehler
  if FileHandle <> 0 then
  try
    result := GetFileSize(FileHandle, nil);
  finally
    CloseHandle(FileHandle);
  end;
end;
Die Fileopen-Attribute entscheiden über das Gelingen der Datei, falls schon geöffnet:
fmOpenRead or fmShareDenyWrite sollte gehen, guck nochmal in die Hilfe zu den verschiedenen Attributen.

Grüßle,
Karl-Heinz

[edit=Luckie]Das nöächste mal setzt bitte die Delphi-Tags selber! Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Dateigröße ermitteln, während die Datei ausgeführt wird?

  Alt 9. Sep 2005, 20:26
Und wenn du es doch mit AssignFile machen willst, setzte vorher den FileMode:
Zitat:
The FileMode variable determines the access mode to use when typed and untyped files (not text files) are opened using the Reset procedure.

The default FileMode is 2 (Read/Write access). Assigning another value to FileMode causes all subsequent Resets to use that mode.
Da standard mäßig eine Datei auch schreibend geöffnet wird, dürfte es eben bei exklusiv geöffneten Dateien nicht gehen. Desweiteren beachte man die Beschrämkung auf nicht Textdateien, deswegen ist die Methode von Karl-Heinz vorzuziehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Karl-Heinz

Registriert seit: 12. Nov 2003
Ort: Waldkirch
12 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Dateigröße ermitteln, während die Datei ausgeführt wird?

  Alt 9. Sep 2005, 21:02
Hallo nochmal,
ich bin etwas unsicher geworden Ich nutze eine ähnliche Funktion selbst in einer Bibliothek immer wieder und habe nochmal nachgeguckt. Ich habe es damals nicht mit der Windows-Api gemacht, sondern mit TFileStream:

Delphi-Quellcode:
function FSize(fname: String): int64;
var
   t : tfilestream;
begin
   result := - 1;
     try
        t := tfilestream.create(fname,fmopenread or fmShareDenyNone);
       result := t.size;
       t.free;
     except
        exit;
     end;
end;
fmShareDenyNone ist wichtig.

Karl-Heinz Krönig
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#6

Re: Dateigröße ermitteln, während die Datei ausgeführt wird?

  Alt 9. Sep 2005, 21:08
Danke! Habe FileMode gesetzt, klappt wieder
  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 20:44 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