Entwickler-Ecke
Dateizugriff - Datei im Konstruktor zuweisen und auslesen?
Dibelius - Fr 13.11.09 20:25
Titel: Datei im Konstruktor zuweisen und auslesen?
hallo,
ich hab ein Problem mit dem Auslesen einer Textdatei. Diese ist imgrunde ähnlich strukturiert wie eine INI-File, jedoch ohne sections. Ich hab mir für das Ganze eine neue Unit und darin wiederum eine neue Klasse erstellt. Meine Überlegung war jetzt so, dass ich gleich beim Konstruktor schaue, ob die Datei schon vorhanden ist. Falls ja, soll Zeile für Zeile ausgelesen werden und jede Zeile in eine StringList geschrieben werden... also eigentlich nichts Großartiges.
In der Speicher-Routine erstelle ich eine Instanz der Klasse und weise den Dateinamen entsprechend zu (Datei existiert auch).
Hier erstmal der Code
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| INTERFACE
uses SysUtils, Classes, Math;
type TMyFile = class private FFile: TextFile; FFileN: string; FVList: TStringList; public constructor Create(const FileName: string); destructor Destroy; override; property FileName:string read FFileN write FFileN; end;
IMPLEMENTATION
constructor TMyFile.Create(const FileName: string); var S: string; begin FFileN := Filename; FVList := TStringList.Create;
AssignFile(FFile, FileName); Rewrite(FFile); FVList.Clear; while not EOF(FFile) do begin ReadLn(FFile, S); FVList.Add(S); end; FVList.Sorted := true; end;
destructor TMyFile.Destroy; begin FVList.Free; CloseFile(FFile); inherited; end; |
Der Aufruf erfolgt nach dem Schema
Delphi-Quelltext
1:
| datei := TMyFile.Create('C:\test.cfg'); |
Compilieren klappt erstmal. Allerdings tritt dann immer der Fehler "I/O-Fehler 104" zur Laufzeit auf.
Ist sicher ein ganz dummer Anfängerfehler, aber ich hoffe trotzdem, dass mir jemand helfen kann.
Niko S. - Fr 13.11.09 20:33
Wieso liest du das nicht direkt ein? :nixweiss:
Delphi-Quelltext
1:
| FVList.LoadFromFile(FileName); |
Das würde dir eine Menge ersparen.
Und wenn die Ähnlich wie eine Ini aufgebaut ist, warum benutzt du nicht gleich IniFiles?
Dann würdest du dir das Parsen sparen.
Dibelius - Fr 13.11.09 20:42
LoadFromFile()... gar nicht dran gedacht. Das wäre natürlich die Lösung. Danke ^^
zum Thema: warum nicht gleich INI?
Ich hab anfangs INI-Files dafür genutzt. Ich will in der Datei Strings speichern, die u.U. sehr lang sein können. Ich hab hier ein wenig im Forum gestöbert und hab durch Zufall irgendwo gelesen, dass INI's nur eine begrenzte Kapazität haben... gut, BigINI wäre vllt eine Lösung, ka... wollte ich aber ungern nehmen, weil ich auch gleich mal mit Klassen und so herumprobieren wollte. Schließlich will ich nicht immer nur Vorgefertigtes nutzen, sondern selbst irgendwo tiefer in die Materie einsteigen.
Nachtrag:
Wenn ich jetzt LoadFromFile verwende, bekomme ich eine exception der Klasse EFOpenError mit der Meldung, dass die Datei nicht geöffnet werden kann, weil sie angeblich von einem anderen Prozess verwendet wird. :(
thepaine91 - Fr 13.11.09 21:22
Wenn das da steht ist es auch so ^^.
Entweder bist du es selbst oder ein anderes programm.
Wenn du sicher bist das es nicht wegen dir selbst ist.
http://www.chip.de/downloads/Unlocker_18414122.html
Da wird normal auch angezeigt wer es im Zugriff hat.
ffgorcky - Fr 13.11.09 22:07
Wenn Dir Deine INI-Dateien damit zu groß werden, dann müsstest Du das ganze zum Beispiel so machen,
indem Du Immer einem Bestimmten Eintrag immer eine extra Datei zuweist - also in etwa so:
Quelltext
1: 2: 3: 4: 5: 6:
| [TextDateiVerzeichnis] ErsterText=DateiErsterText.txt ZweiterText=DateiZweiterText.txt DritterText=DateiDritterText.txt VierterText=DateiVierterText.txt ... |
Dann könntest Du also dort in der INI-Datei immer nachgucken, welche Datei Du aufrufen musst, damit Du das gewünschte erhältst.
Ich denke zumindest gerade, dass das doch eigentlich so klappen müsste
...und hoffe, dass ich Dich damit nicht auf blöde Abwege bringe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!