![]() |
Savetofile Problem
Also,ich habe folgendes Problem ich lasse eine .txt datei aus einer Tstringlist abspeichern,beende das programm ,habe dann aber beim laden der datei das Problem,dass
es einen Fehler gibt,dass ich keine Berrechtigung hab,weil die Datei mit einem Programm geöffnet ist. Hat irgendjemand eine Idee,wie ich das beheben kann? |
Re: Savetofile Problem
Zeig mal deinnen Code. Du musst die Datei auch wieder freigeben. Aber ohne Code kann ich nur raten.
Gruß Jens |
Re: Savetofile Problem
Die Datei wird geschlossen, wenn die Methode Free von TStringList aufgerufen wird. Allerdings sollte Windows beim Beenden des Prozesses auch alle offenen Dateihandles des Prozesses schliessen. Greift eventuell noch ein anderes Programm auf die Datei zu?
|
Re: Savetofile Problem
hast du die Datei geschlossen, nachdem du sie gespeichert hast??
[edith sagt:]simon war zu langsam![edith] |
Re: Savetofile Problem
Also
Stringlist.Lines.savetofile(xyz); Stringlist.free ? |
Re: Savetofile Problem
Nein, bei einer TStringList wird nur während des Aufrufs von LoadFromFile oder SaveToFile ein TFileStream erzeugt und auch wieder freigegeben, welcher auf die Datei zugreift ... ansonsten hat die TStringList keine Verbindung zur Datei.
Hast du einen Unlocker oder z.B. den Process Explorer, womit du mal nachsehen kannst, wer die Datei noch im Zugriff hat? |
Re: Savetofile Problem
Naja das Programm ist mein eigenes
aber das Problem ist das der Stream nie beendet wird oder besser gesagt ich hab nicht die Möglichkeit zum erneuten speichern,dass Laden funktioniert. |
Re: Savetofile Problem
Zitat:
Delphi-Quellcode:
Zitat:
Zeig mal deinnen Code. |
Re: Savetofile Problem
gadlist is meine TStringlist und
pfad:= ExtractFilePath(Application.Exename);(dateipfad) Speichern:
Delphi-Quellcode:
Laden:
try
if not DirectoryExists(pfad+'System\Config\gads.cf') then ForceDirectories(pfad+'System\Config'); gadlist.lines.SaveToFile(pfad+'System\Config\gads.cf'); except end;
Delphi-Quellcode:
try
gadlist.lines.loadfromFile(pfad+'System\Config\gads.cf'); except end; |
Re: Savetofile Problem
Sollte wohl eher
Delphi-Quellcode:
heissen
if not DirectoryExists(pfad+'System\Config') then
|
Re: Savetofile Problem
Abgesehn davon, wird nicht umsonst ständig darauf hingewiesen, daß keine Leeren verwendet werden sollen, denn so bekommt ja keiner den Grund für einen Fehler mit,
bzw, es fällt im fertigen Programm nichtmal auf, daß überhaupt ein Fehler auftritt und man wundert sich nur, daß irgendwas fehlt.
Delphi-Quellcode:
oder Dergleichen,
try
... except {nix} end;
Delphi-Quellcode:
wo die Fehlermeldung einfach so ignoriert wird.
try
... except Result := False; end; Und welchen Wert hat "pfad"? Zitat:
ForceDirectories = prüfe nach, ob Verzeichnis existiert und wenn nicht, dann erstelle es |
Re: Savetofile Problem
@himitsu: Ich kaufe ein "E" und will lösen "Exceptions". :mrgreen:
|
Re: Savetofile Problem
naja das problem ist das er es nicht speichern KANN weil das noch geöffnet ist und ich will wissen,wie ich meinem programm sage,dass es nach dem speichern die datei in rughe lassen soll.
|
Re: Savetofile Problem
Dann gib doch die Stringliste nach dem Speichern mal frei, wie ich gesagt habe, und guck, was passiert.
|
Re: Savetofile Problem
Funktioniert Nicht,denn er kann die datei immernoch nicht reinladen
|
Re: Savetofile Problem
Wie gesagt, an dem SaveToFile sollte es nicht liegen.
Delphi-Quellcode:
Gleiches bei LoadFromFile, also liegt es nicht an den beiden Methoden,
procedure TStrings.SaveToFile(const FileName: string; Encoding: TEncoding);
var Stream: TStream; begin Stream := TFileStream.Create(FileName, fmCreate); // Dateihandle erstellen try SaveToStream(Stream, Encoding); finally Stream.Free; // und hier wird das Dateihandle wieder freigegeben end; end; und du solltest den Fehler auch mal an anderer Stelle suchen. (unter Umständen kann dieses auch der Virenscanner sein) |
Re: Savetofile Problem
Boah, ich habe keine Ahnung, was du da mit der Stringliste machst:
Delphi-Quellcode:
Es könnten noch kleinere Fehler drin sein. Habe das nur mal eben in Notepad runtergetippt.
procedure Save(Text: string; Filename: string);
var sl: TStringList; begin sl := TStringList.Create; try try sl.Text := Text; sl.Lines.SaveToFile(Filename); except on E: Exception do raise E.Create(E.Message); end; finally sl.Free end; end; function Load(Filename: string): string; var sl: TStringLList; begin sl := TStringList.Create; try try sl.Lines.LoadFromFile(Filename); Result := sl.Text; except on E: Exception do raise E.Create(E.Message); end; finally sl.Free; end; end; // Aufruf speichern try Save(Memo1.Text, 'C:\foo\bar.cfg'); except on E: Exception do ShowMessage(E.Message); end; // Aufruf laden try Memo1.Text := Load('C:\foo\bar.cfg'); except on E:Exception do ShowMessage(E.Message); end; |
Re: Savetofile Problem
ich denke das problem kommet weil ich auf den text noch zugreife,indem ich ihn anderen komponenten als eigenschaft zuweise.könnte das sein?
|
Re: Savetofile Problem
Eigentlich nicht. Es geht ja um die Datei und die wird von den Texteigenschaften der anderen Komponenten ja nicht blockiert. Greift eventuell noch ein anderer Prozess auf die Datei zu?
|
Re: Savetofile Problem
ne,das wundert mich generell das das nicht geht,denn ioch mache sowas oft,aber gibt es eine andere möglichkeit text abzuspeichern als mit tstringlist oder memo?
|
Re: Savetofile Problem
Althergebracht mit AssignFile etc. oder mit Streams ginge das auch. Ich glaube allerdings nicht, dass das Dein Problem lösen wird.
|
Re: Savetofile Problem
Man könnte noch die alten Pascal Routinen mit
![]() |
Re: Savetofile Problem
das geht ja net auf geöffnete datein
|
Re: Savetofile Problem
Wäre es nicht auch eine Möglichkeit mein programm komplett zu beenden also prozess killen?
|
Re: Savetofile Problem
Solltest Du nicht lieber den Fehler eingrenzen statt die Brechstange rauszuholen? Im Notfall einfach mal Rebooten und nachsehen, ob das Problem weiterhin besteht.
|
Re: Savetofile Problem
naja der fehler liegt einfach dabei,dass mein programm die datei nicht wieder freigibt und noch weiter mit ihr läuft
|
Re: Savetofile Problem
Hast Du die Datei denn noch anderweitig geöffnet? Zeig doch mal etwas mehr Code.
|
Re: Savetofile Problem
ich hab die datei nicht mehr geöffnet:
Ablauf: 1.Datei wird geladen 2.Datei wird zeile für zeile eingelesen(dateipfade) 3.die datei das pfades wird eingelesen und dann werden objekte dafür erstellt |
Re: Savetofile Problem
Sry, ich lese da nur "Datei". Du hast eine Datei, in der Pfade stehen, diese liest Du ein und öffnest dann weitere Dateien, die sich in diesen eingelesenen Pfaden befinden sollen?
|
Re: Savetofile Problem
also eine .txt datei in der dateipfade zu bildern sind und dann werden timages erstellt um die anzuzeigen
|
Re: Savetofile Problem
Das kann aber nicht der Grund sein, wenn Du diese Textdatei mit LoadFromFile einliest. Danach ist sie nicht mehr im Gebrauch.
|
Re: Savetofile Problem
is ja auch normaler weise so ,naja ich leg das programm ersma auf eis
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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