Thema: Delphi Datei Frei geben

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.186 Beiträge
 
Delphi 12 Athens
 
#5

Re: Datei Frei geben

  Alt 2. Jun 2010, 08:37
[edit]
ahhh stimmt, das FileCreate, welches nie geschlossen wird, hab ich übersehn.

man wertet sofort aus, und hofft nicht, daß zwischendrin nix passiert (oder man verwendet einen Resourcenschutzblock)
Delphi-Quellcode:
CreateDir(Path + 'Pics\');
Auswertung:= FileCreate(Path + Datenbank);
if Auswertung = INVALID_HANDLE_VALUE then
begin
  ShowMessage('Datenbank konnt nicht erstellt werden.' + sLineBreak
    + 'Eine Lösung wäre vielleicht, das Programm als Administrator zu starten.');
end else
  CloseHandle(Auswertung);
Exit;

außerdem könnte ein bissl "ordentliche" Fehlerbehandlung nicht schaden
Delphi-Quellcode:
const LDB : String = 'LampenDB.txt';

function Auslesen(Datenbank: string):TStringArray;
var f: Textfile;
    a, Auswertung: integer;
    Zeile: TStringArray;
    Path: String;
begin
  Zeile:= Nil;
  Path:= extractfilepath(paramStr(0)) + 'LampenDB\';
  if DirectoryExists(Path) = False then //Wenn Pfad nicht angelegt ist
  begin
    CreateDir(Path);
    CreateDir(Path + 'Pics\');
    Auswertung:= FileCreate(Path + Datenbank);
    if Auswertung = INVALID_HANDLE_VALUE then
    begin
      ShowMessage('Datenbank konnt nicht erstellt werden.' + sLineBreak
        + 'Eine Lösung wäre vielleicht, das Programm als Administrator zu starten.');
    end else
      CloseHandle(Auswertung)
    Exit;
  end;

  AssignFile(f,Path + Datenbank); //Die daten aus dem Dokument werden in die Variable f "geschoben"
  reset(f); //Geht an anfang der variable f
  {$I-}
  A:= 0;
  while not EOF(f) do //wenn nicht das ende vom dokument erreicht ist, dann
  begin
    Setlength(Zeile,A+1);
    readln(f,Zeile[A]);
    if Zeile[A] <> 'then
      A:= A + 1;
  end;

  CloseFile(f); //schließt das dokument wieder
  {$I-}
  if IOResult <> 0 then FehlerMeldung;

  result := Zeile;
end;
oder mit Resourcenschutzblöcken (Try-Finally)
Delphi-Quellcode:
const LDB : String = 'LampenDB.txt';

function Auslesen(Datenbank: string):TStringArray;
var f: Textfile;
    a, Auswertung: integer;
    Zeile: TStringArray;
    Path: String;
begin
  Zeile:= Nil;
  Path:= extractfilepath(paramStr(0)) + 'LampenDB\';
  if DirectoryExists(Path) = False then //Wenn Pfad nicht angelegt ist
  begin
    CreateDir(Path);
    Auswertung:= FileCreate(Path + Datenbank);
    try
      CreateDir(Path + 'Pics\');
      if Auswertung = INVALID_HANDLE_VALUE then
      begin
        ShowMessage('Datenbank konnt nicht erstellt werden.' + sLineBreak
          + 'Eine Lösung wäre vielleicht, das Programm als Administrator zu starten.');
      end
    finally
      CloseHandle(Auswertung)
    end;
    Exit;
  end;

* AssignFile(f,Path + Datenbank); //Die daten aus dem Dokument werden in die Variable f "geschoben"
  reset(f); //Geht an anfang der variable f
  try
    A:= 0;
    while not EOF(f) do //wenn nicht das ende vom dokument erreicht ist, dann
    begin
      Setlength(Zeile,A+1);
      readln(f,Zeile[A]);
      if Zeile[A] <> 'then
        A:= A + 1;
    end;
  finally
    CloseFile(f); //schließt das dokument wieder
  end;

  result := Zeile;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat