Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateigröße ermitteln ohne Datei zu öffnen (https://www.delphipraxis.net/64563-dateigroesse-ermitteln-ohne-datei-zu-oeffnen.html)

jim_raynor 2. Mai 2006 15:50

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

Zitat von danku
kann man bei einer Tstringgrid die option "goediting" unterschiedliche auf 2spalten anwenden? die 1 true die andere false, oder gilt das komplett?

Was hat das denn mit der Frage:

Zitat:

Zitat von danku
wie kann ich erreichen, das genau von der datei aus sgfiles.cells[0,1 + i] die größe in sgfiles.cells[1,1 + i] geschrieben wird?

zu tuen?

Vielleicht stehe ich ja auch auf dem Schlauch :stupid:

Zeig am besten mal, wie du dein Stringgrid füllst und zwar komplett!

Edit: Naja solangsam verstehe ich: So ist es richtig.

Delphi-Quellcode:
for i := 0 to OpenDialog1.Files.Count - 1 do
begin
  sgfiles.cells[0,1 + i]:= OpenDialog1.Files[i];
  sgfiles.cells[1,1+i] := floattostr(filesize(opendialog1.Files.Strings[i]));
end;

danku 2. Mai 2006 18:15

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

Delphi-Quellcode:
I-------------I-------------I
I Spalte 1    I   Spalte 2 I
I---------------------------I
I            I            I
I    ...    I   ...     I
I            I            I

Die Daten in Spalte1 soll man editieren können, in der 2 aber nicht.
Geht das üeberhaupt?

with tstringgrid do
.... gehts z.b. schon mal nicht

Rob09 15. Aug 2007 10:23

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Hi! Meine erste Frage: Ich würde gerne den Code aus Beitrag #16 benutzen. Wenn ich ihn allerdings folgendermaßen versuche aufzurufen

Delphi-Quellcode:
var
vTmp1:pchar;
vTmp2:int64;

begin
vTmp1:=pchar('c:test.bmp');
vTmp2:=getfilesize(vTmp1);
bekomme ich die letzte Zeile markiert mit "Incompatible Types: Cardinal and PChar". Wo liegt der Fehler?

Zweitens: Wo liegt der Vorteil von Hawkeyes Methode gegenüber diesem Prinzip:

Delphi-Quellcode:
var
f: file of byte;
v: integer;

begin
assignfile(f, 'c:\test'); reset(f);
v:=filesize(f);
closefile(f);
Danke schonmal!
Gruß! Robert

Hawkeye219 15. Aug 2007 16:53

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Herzlich willkommen in der Delphi-PRAXiS, Robert!

Den von dir beschriebenen Fehler kann ich nicht nachvollziehen. Ist das wirklich der Quelltext, der den Fehler auslöst?

Zitat:

Zitat von Rob09
Wo liegt der Vorteil von Hawkeyes Methode[...]

Du schmückst mich mit fremden Federn, die Routine stammt von Luckie (Beitrag #7). Wir haben sie nur im Laufe des Threads ein wenig weiterentwickelt.

Deine Frage wird zum Teil schon durch den Thread-Titel beantwortet: der Code liefert die Größe einer Datei, ohne diese Datei wirklich zu öffnen. Ein weiterer Vorteil ist, daß die Routine auch bei Dateien ab 2 GByte Länge den richtigen Wert für die Größe ermittelt. Die Routinen der Delphi-RTL funktionieren (zumindest bis Version 7) in diesem Fall nicht.

Gruß Hawkeye

Rob09 15. Aug 2007 18:10

Re: Dateigröße ermitteln ohne Datei zu öffnen
 
Hi! Danke, bin sehr herzlich aufgenommen worden ;-)

Hmm... ja, den Fehler bekomme ich. Naja, hab das Prog jetzt halt mit FileSize() geschrieben. Ich nehme an, das (was im Thread-Titel steckt) bedeutet dann im Endeffekt, dass die Methode schneller ist als FileSize(), richtig?

LG!

MuTzE.Y85 9. Mai 2014 14:00

AW: Dateigröße ermitteln ohne Datei zu öffnen
 
Eigentlich kann man doch auch
Code:
function GetFileSize(szFile: String): Int64;
statt
Code:
function GetFileSize(szFile: PChar): Int64;
schreiben, dann muss man beim Aufruf der Funktion nich auch noch zu PChar umwandeln. Ist ja doppelt gemoppelt :D

Eingabe String
Delphi-Quellcode:
function GetFileSize(szFile: String): 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;
Und wenn man PChar vorliegen hat, dann kann man sich die Konvertierung innerhalb der Funktion sparen :wink:

Eingabe PChar
Delphi-Quellcode:
function GetFileSize(szFile: PChar): Int64;
var
  fFile: THandle;
  wfd: TWIN32FINDDATA;
begin
  Result := -1;
  fFile := FindFirstfile(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;

hathor 9. Mai 2014 17:32

AW: Dateigröße ermitteln ohne Datei zu öffnen
 
Kleine Änderung für XE2:

Delphi-Quellcode:
function GetFileSize(szFile: String): 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;
  WinApi.Windows.FindClose(fFile); //               <---------------------
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 Uhr.
Seite 4 von 4   « Erste     234   

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