Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FileSize(file.exe); (https://www.delphipraxis.net/77752-filesize-file-exe-%3B.html)

yildi 24. Sep 2006 13:34


FileSize(file.exe);
 
moin!

ich möchte die größe einer exe datei ermitteln.

Delphi-Quellcode:
AssignFile(UpdateFile, 'Client.exe');
Reset(UpdateFile);
UpdateSize := FileSize(UpdateFile);
showmessage(IntToStr(UpdateSize));
CloseFile(UpdateFile);
mit txt datein und si klappt das ja auch wunderbar. nur mit meiner exe irgendwie nicht.
ist sie mit 600kb zu gross ?

gitb es noch eine andere möglichkeit ?

danke für eure hilfe,
yildi

MuTzE 24. Sep 2006 13:38

Re: FileSize(file.exe);
 
Ich habs ma eben mit einer 10 MB Datei probiert, funktioniert!
Schick am besten mal die ganze procedure, weil da fehlt ja noch was.

___________
EDIT:

Hier andere Versionen:
Dateigröße einer beliebigen Datei ermitteln

yildi 24. Sep 2006 13:39

Re: FileSize(file.exe);
 
Delphi-Quellcode:
procedure TForm1.BtnServerUpdateClick(Sender: TObject);
var
  FUpdateStream: TFileStream;
  UpdateFile : File;
  UpdateSize: longint;
begin
  if FileExists('Server.exe') then
    begin
      AssignFile(UpdateFile, 'Server.exe');
      Reset(UpdateFile);
      UpdateSize := FileSize(UpdateFile);
      showmessage(IntToStr(UpdateSize));
      CloseFile(UpdateFile);

      //ClientSocket1.Socket.SendText('ServerUpdateSize:'+inttostr(UpdateSize));
     
      //FUpdateStream := TFileStream.Create('Server.exe', fmOpenRead);
      //ClientSocket1.Socket.SendStream(FUpdateStream);
      //Log.Lines.Add('('+TimeToStr(Now)+') System: Das Update wurde übertragen und wird nun installiert.');
    end
  else
    Log.Lines.Add('('+TimeToStr(Now)+') System: Keine Server.exe gefunden.');
end;

MuTzE 24. Sep 2006 13:41

Re: FileSize(file.exe);
 
Oben stehen andere Möglichkeiten!

yildi 24. Sep 2006 13:42

Re: FileSize(file.exe);
 
ach ja, als fehler bekommen ich:

Project ... raised exception class EInOut Error with message 'I/O error 32'. Process Stopped.

Der_Unwissende 24. Sep 2006 13:43

Re: FileSize(file.exe);
 
Hi,
du gehst da ein wenig falsch an die Sache ran. FileSize gibt dir die Anzahl der Datensätze einer typisierten Datei zurück, bei einer .exe müsstest du also File of Byte nehmen.

Du kannst dir die Informationen aber auch direkt mit findFirst holen:
Delphi-Quellcode:
function getFileSize : Integer;
var searchRecord : TSearchRec;
begin
  if findFirst(PFAD_ZU_DER_DATEI, faAnyFile, searchRecord) = 0 then
  begin
    result := searchRecord.Size;
  end
 
  else
  begin
    result := -1; // datei nicht gefunden
  end;
end;
Gruß Der Unwissende

marabu 24. Sep 2006 14:16

Re: FileSize(file.exe);
 
Hi all,

die Dateigröße liefert der für den Update-Vorgang benötigte Stream sowieso:

Delphi-Quellcode:
procedure TForm1.BtnServerUpdateClick(Sender: TObject);
const
  FILE_NAME = 'server.exe';
var
  fs: TFileStream;
  cwd, fn: TFileName;
begin
  GetDir(0, cwd);
  fn := IncludeTrailingPathDelimiter(cwd) + FILE_NAME;
  if FileExists(fn) then
  begin
    fs := TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite);
    ShowMessage(IntToStr(fs.Size));
//  ClientSocket1.Socket.SendText('ServerUpdateSize:' + IntToStr(fs.Size));
//  ClientSocket1.Socket.SendStream(fs);
//  Log.Lines.Add('(' + TimeToStr(Now) + ') System: Das Update wurde übertragen und wird nun installiert.');
  end else
    Log.Lines.Add('(' + TimeToStr(Now) + ') System: Datei "' + FILE_NAME + '" nicht gefunden.');
end;
Getippt und nicht getestet.

Grüße vom marabu

GuenterS 24. Sep 2006 15:04

Re: FileSize(file.exe);
 
Zitat:

Zitat von marabu
Hi all,

die Dateigröße liefert der für den Update-Vorgang benötigte Stream sowieso:

Delphi-Quellcode:
procedure TForm1.BtnServerUpdateClick(Sender: TObject);
const
  FILE_NAME = 'server.exe';
var
  fs: TFileStream;
  cwd, fn: TFileName;
begin
  GetDir(0, cwd);
  fn := IncludeTrailingPathDelimiter(cwd) + FILE_NAME;
  if FileExists(fn) then
  begin
    fs := TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite);
    ShowMessage(IntToStr(fs.Size));
//  ClientSocket1.Socket.SendText('ServerUpdateSize:' + IntToStr(fs.Size));
//  ClientSocket1.Socket.SendStream(fs);
//  Log.Lines.Add('(' + TimeToStr(Now) + ') System: Das Update wurde übertragen und wird nun installiert.');
  end else
    Log.Lines.Add('(' + TimeToStr(Now) + ') System: Datei "' + FILE_NAME + '" nicht gefunden.');
end;
Getippt und nicht getestet.

Grüße vom marabu


Wäre natürlich eine feine Sache, wenn man den FileStream noch freigeben würde...

marabu 24. Sep 2006 15:17

Re: FileSize(file.exe);
 
Da hast du Recht, Günter. Ich war so damit beschäftigt überflüssigen Code aus der Vorlage zu entfernen, dass ich gar nicht gemerkt habe, dass dort schon eine Zeile fehlte.

Freundliche Grüße

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz