Einzelnen Beitrag anzeigen

Drahcir

Registriert seit: 13. Jun 2012
34 Beiträge
 
Delphi 6 Personal
 
#1

TFileStream.Create gibt Error

  Alt 26. Jan 2013, 15:17
Hab (wiedermal) n bissl und gebastelt und will jetzt ne Schleife die mir eine Ordnergröße angibt ... Dazu muss ich ja rekursiv alle Dateien durchgehen.

Die rekursive Schleife tut es, die Abfrage um Dateiengröße zu ermitteln auch ... fast immer.

Hab ich zum Teil ausm Internet, teils selbst gebastelt:

Delphi-Quellcode:
{*** Funktion um Dateigröße zu ermitteln ***}
function TfrmMain.getDateiGroesse(Dateiname : string): int64;
var Datei : TFileStream;
begin
  result := 0;

  try
    if (Fileexists(Dateiname))
    then begin
      g_pLogFile.Warning('Try to open ' + Dateiname)
      Datei := TFileStream.Create(Dateiname, fmOpenRead OR fmShareDenyNone);
      result := Datei.Size;
    end
    else g_pLogfile.Error('Datei ' + Dateiname + ' exisitiert nicht!')

  finally
    g_pLogFile.Warning('Datei ' + Dateiname + ' wird freigegeben')
    Datei.free;
  end;
end;
{************************}
Dazu muss man sagen, dass in "Dateiname" der vollständige Pfad und Dateiname mitgegeben werden (ja fehlerhafte Variablenbezeichnung).

Bei fast allen Dateien funktioniert das auch, nur wenn ich den durch 'C:\' laufen lasse läuft es erst gut, viele Hundert Dateien werden erfolgreich wieder freigegeben (darunter auch verschiedene xxx.sys-Dateien, zum Beispiel 'C:\config.sys' und 'C:\AMD\..\atdcm64a.sys') nur kommt bei einigen Dateien eine EFOpenError-Exception mit der Meldung, die Datei (Bsp: 'C:\hiberfil.sys') könne nicht geöffnet werden.

Naja hab Google und hier die Suche gefragt und bin nur über Lösungsvorschläge gestolpert, die Datei würde vielleicht nicht exisiteren, ... aber sie tut es auf jeden Fall, hab im Debug geschaut, der Dateiname wird richtig übergeben.

Die Exception wird an der Stelle
Datei := TFileStream.Create(Dateiname, fmOpenRead OR fmShareDenyNone); aufgerufen.

Mir ist jetzt aufgefallen wenn ich die Datei im Explorer betrachte, kommt das (siehe Bild) rum, kann mir selbst aber keinen Zusammenhang herstellen.
Im Bild gezeigt sind die Dateien config.sys (funktioniert!), hiberfil.sys (funzt nicht), IO.SYS (ebenfalls nicht) und weitere Ordner oben die alle funktioniert haben.

Kann mir wer weiterhelfen? Ich will nicht alle xxx.sys-Dateien ignorieren, was bei ner Ordnergrößenausgabe zu fehlerhaften Werten führt, mir würde es reichen wenn das Programm dokumentiert (g_pLogFile.Error('irgendeine Nachricht'), dass die Datei nicht geladen werden konnte und die Schleife aber nicht abbricht und ne Exception ausspuckt, sondern weiterläuft und als Result dann '0' für die Größe übergeben wird)

Hier noch das Bild: http://www7.pic-upload.de/26.01.13/w583efyvse8o.jpg
Es gibt nur 10 Arten von Menschen - die die Binärzahlen lesen können und den Rest
  Mit Zitat antworten Zitat