AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ForceFile

Ein Thema von Monday · begonnen am 23. Jul 2022 · letzter Beitrag vom 25. Jul 2022
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#9

AW: ForceFile

  Alt 24. Jul 2022, 11:52
*1) Einzig um beim Laden bereits zu prüfen, ob die Datei später auch gespeichert werden kann,
aber auch a kann man direkt mir einem Read/Write-Schreibzugriff die Datei öffnen (ohne ihren Inhalt zu löschen) und direkt laden.
Mir ging's darum, am Anfang zu prüfen, ob die Datei nicht nur geladen werden kann (sofern vorhanden), sondern auch am Anfang schon (möglichst) sicherzustellen, dass sie im späteren Programmverlauf auch geschrieben werden kann.

Bei 'ner Logdatei ist's halt "blöde", wenn nach stundenlangem Programmlauf festgestellt wird, dass die Logdatei nicht geschrieben werden kann. Ist halt ärgerlich, kommt aber zuweilen schonmal im realen Leben vor.

Daher mach' ich lieber ein paar Prüfungen zuviel, als irgendwann auf die Nase zu fallen.

Wenn das ForceDirectories bereits am Anfang scheitert, weiß man, dass man nicht sinnvoll weitermachen kann, auch wenn das ForceDirectories letztlich unmittelbar vor dem SaveToFile ausreichen würde.

Natürlich ist es nicht sinnvoll eine leere Datei zuladen, Nichts in 'ner Stringliste ist halt eben Nichts in 'ner Stringliste, aber ich weiß dann schonmal sicher, dass ich Nichts habe und muss nicht mehr damit rechnen, dass ich im weiteren Programmverlauf nichtmal Nichts haben werde

Beim ForceFile weiß ich aber, dass das Verzeichis erstellt werden kann und das in dem Verzeichnis eine Datei erstellt werden kann. Man könnte die Funktion noch um eine IO-Prüfung erweiteren, so dass damit dann auch noch eventuell vorhandene Rechteprobleme, ... festgestellt werden könnten und dort einem nicht unerwarten eine Exception um die Ohren fliegt.
Delphi-Quellcode:
function ForceFile(dateiname: string; bereits_vorhandene_datei_trotzdem_neu_erstellen: Boolean = False) : Integer;
var
  f : Text;
  bOk : Boolean;
  iIOResult : Integer;
begin
  Result := 0;
  bOk := ForceDirectories(ExtractFilePath(Dateiname));
  if bOk then begin
    if not FileExists(dateiname) or bereits_vorhandene_datei_trotzdem_neu_erstellen then begin
      AssignFile(f, dateiname);
      {$I-}
      ReWrite(f);
      {$I+}
      Result := IOResult;
      CloseFile(f);
    end;
  end else begin
    Result := -MaxInt;
  end;
end;
...
iIOResult := ForceFile(datei);
case iIOResult of
  0 : begin
        Stringlist.Create;
        StringList.LoadfromFile(datei);
        ...
        StringList.SaveToFile(datei);
        StringList.Free;
     end;
  // hier ggfls. andere Werte von iIOResult gezielt abfragen und entsprechend reagieren.
  else
    // Fehlerbehandlung ...
  end;
end;
Und ja, die Frage ist, wieviel Aufwand will man da treiben?
  Mit Zitat antworten Zitat
 


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 06:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz