AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dateigröße ohne Öffnen der Datei berechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Dateigröße ohne Öffnen der Datei berechnen

Ein Thema von Nils_13 · begonnen am 27. Sep 2007 · letzter Beitrag vom 28. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 21:00
Hi,

ich möchte von allen Dateien die Dateigröße anzeigen lassen können. Bisher tat es immer diese Funktion:
Delphi-Quellcode:
function GetFileSize(const FileName : String): Int64;
var FileStream: TFileStream;
begin
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
  try
    try
      Result := FileStream.Size;
    except
      Result := 0;
    end;
  finally
    FileStream.Free;
  end;
end;
Wenn ich allerdings die Größe meiner Auslagerungsdatei haben möchte, kriege ich wegen dem FileStream sofort eine Zugriffsverletzung, da man nicht die Berechtigung hat, diese Datei zu öffnen. Wie könnte man dennoch die größe bestimmen ?
  Mit Zitat antworten Zitat
marabu

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

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 21:05
Hallo Nils,

schau mal hier: dateigroesse ermitteln ohne datei zu oeffnen

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 21:05
Edit: zu langsam...
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
marabu

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

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 21:08
Der gute Wille zählt auch.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#5

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 21:14
Habe ich doch tatsächlich übersehen....
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;
  Result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow;
  Windows.FindClose(fFile);
end;
Rufe ich die wie oben auf, bloß dass ich anstelle von PWideChar einfach PChar nehme ?
TreeData.fGroesse := BytesToStr(GetFileSize(PChar(Msg.LParam)));
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 21:43
Das ist jetzt vielleicht eine blöde Frage, aber was spricht eigentlich gegen MSDN-Library durchsuchenGetFileAttributesEx?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 21:56
Nichts, habe bloß nicht dran gedacht.

Delphi-Quellcode:
function GetFileSize(f : PAnsiChar) : Int64;
var FI : TWin32FileAttributeData;
begin
  Result := 0;
  if GetFileAttributesEx(f, GetFileExInfoStandard, @FI) then
    Result := FI.nFileSizeHigh;
end;
Das ergibt bei mir allerdings - genauso wie bei Luckies Funktion - den vorgesetzten Ergebniswert (in dem Fall 0).
Merkwürdiger Weise habe ich immer den Laufwerksbuchstaben "E" als Eingabe-PAnsiChar, es wundert mich, wie das mit der alten Funktion funktionieren konnte.

Nachtrag: Es liegt am AnsiChar, es MUSS WideChar benutzt werden, sonst gibt es Salat....
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 22:04
Naja, dass in nFileSizeHigh 0 steht, finde ich nicht direkt überraschend, wenn die Datei nicht gerade größer als 4GB ist. Vielleicht mal (sinngemäß)
(nFileSizeHigh shl 32) or nFileSizeLow probieren?

Übrigens ist mir aufgefallen, dass im Online-MSDN die Mindestanforderung Windows 2000 ist, laut Windows Vista SDK jedoch Windows 98/NT4. Wie unangenehm, dass da auch langsam der Support für die alten Windows-Versionen endet. Ich fand es eigentlich immer ganz angenehm, zu wissen, ob mein Programm theoretisch auch unter Windows 98 laufen würde.

Edit @Nachtrag: Müsstest du nicht auch GetFileAttributesExA benutzen können?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#9

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 22:10
Ah, das funzt endlich fast überall, danke. Die Pagefile.sys ist mommentan bei 0 Bytes kann man das noch verbessern ? Man kann GetFileAttributesExA benutzen. Dass die Abwärtskompatibilität immer mehr abnimmt, ist wirklich schade.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#10

Re: Dateigröße ohne Öffnen der Datei berechnen

  Alt 27. Sep 2007, 22:13
Zeigen die anderen geposteten Funktionen für diese Datei denn auch 0 an? Wie groß ist die Datei denn? Nicht, dass sie zufällig 4GB groß ist und deshalb nFileSizeLow 0 ist und nFileSizeHigh 1 und da nur was beim Casten/Shiften schiefgelaufen ist *g*

@Roter Kasten bzgl. Abwärtskompatibilität: Sie nimmt ja nicht ab in dem Sinne, sondern sie wird nicht mehr dokumentiert. Bisher fand man im Windows SDK die Angaben teilweise bis vor Windows 98/NT4 runter. Aber die sind ja nicht mehr offiziell.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:33 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