Einzelnen Beitrag anzeigen

Drahcir

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

AW: TFileStream.Create gibt Error

  Alt 27. Jan 2013, 12:32
Und da bin ich mit Programm V2, mal sehen wo ihr noch überall Fehler findet

Moin Zusammen,

das fmShareDenyNone hilft Dir nichts, wenn ein anderer Prozess die Datei exklusiv geöffnet hat.
Die Verwendung von TSearchRec.Size funktioniert auch nur bedingt, da es auf 32-Bit begrenzt ist.
Besser:

  iFileSize := (sr.FindData.nFileSizeHigh shl 32) or (sr.FindData.nFileSizeLow);
Dann werd ich mir da was überlegen müssen

Ich will ja keine Werbung machen, aber mit meiner Komponente wäre das ganz einfach zu lösen gewesen
Schau ich mir gerne nachher an wenn ich Zeit habe

das fmShareDenyNone hilft Dir nichts, wenn ein anderer Prozess die Datei exklusiv geöffnet hat.
+ wenn man keine Berechtigung zum Lesen der Datei hat, dann geht das auch nicht
Hm ok, ich glaube dann stört mich das exklusiv und würde mich wundern wenn ich Berechtigungen auf eine MSDOS.SYS kriegen würde, wo wäre denn da dann die Sicherheit?

Naja hab n bissl umgesattelt mit den vorhergehenden Beiträgen und meine Funktion, die auch (fast ) funktioniert, sieht so aus:

Delphi-Quellcode:
function TfrmMain.getDirectoryGroesse(OrdnerPfad:string) : Int64;
var Rec : TSearchRec; Groesse : Int64;
begin
  Groesse := 0;
  result := 0;
  if SysUtils.FindFirst(OrdnerPfad + '*', faAnyFile, Rec) = 0 then
  try
    repeat
      if (Rec.Name <> '.') and (Rec.Name <> '..')
      then begin
        if DirectoryExists(OrdnerPfad + Rec.Name)
        then begin
          Groesse := Groesse + getDirectoryGroesse(Ordnerpfad + Rec.Name + '\');
          g_pLogFile.Warning('Öffne Ordner ' + Ordnerpfad + Rec.Name + '\');
        end;
        if FileExists(OrdnerPfad + Rec.Name)
        then begin
          Groesse := Groesse + Rec.Size;
          g_pLogFile.Information('Datei ' + Ordnerpfad + Rec.Name + ' : ' + FormatFloat(' #,###.', Rec.Size));
        end;
      end;
    until SysUtils.FindNext(Rec) <> 0;
  finally
    g_pLogFile.Warning('Ordnergröße ' + Ordnerpfad + Rec.Name + ' : ' + FormatFloat(' #,###.', Groesse));
    SysUtils.FindClose(Rec);
  end;
  
  result := Groesse;
end;
Naja aber da scheint der irgendwie auch Dateien zu ignorieren, wenn ich einen Ordner (Bsp: 'C:\Users\Drahcir\' durchsuchen lasse, fehlen knapp 40GB, keine Ahnung wo die verschwinden naja ich arbeite noch dran ... Kanns sein dasses die Ordner mit den Namen '.' oder '..' sind, die ich ja bei allem geflissentlich übergehe, was sind die eigentlich? (ich glaub ich bin wieder Off-Topic aber gehört ja zu dem Programm)

Vielen Dank nochmal für die schnellen und tollen Antworten
Es gibt nur 10 Arten von Menschen - die die Binärzahlen lesen können und den Rest
  Mit Zitat antworten Zitat