Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Savetofile Problem (https://www.delphipraxis.net/151456-savetofile-problem.html)

DMonkey 18. Mai 2010 19:14


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?

Jens Hartmann 18. Mai 2010 19:15

Re: Savetofile Problem
 
Zeig mal deinnen Code. Du musst die Datei auch wieder freigeben. Aber ohne Code kann ich nur raten.

Gruß Jens

Luckie 18. Mai 2010 19:22

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?

SimonRap 18. Mai 2010 19:23

Re: Savetofile Problem
 
hast du die Datei geschlossen, nachdem du sie gespeichert hast??
[edith sagt:]simon war zu langsam![edith]

DMonkey 18. Mai 2010 20:21

Re: Savetofile Problem
 
Also

Stringlist.Lines.savetofile(xyz);
Stringlist.free

?

himitsu 18. Mai 2010 20:28

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?

DMonkey 18. Mai 2010 20:37

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.

himitsu 18. Mai 2010 21:08

Re: Savetofile Problem
 
Zitat:

Zitat von DMonkey
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.

Dann bleibt noch die schonmal genannte Frage:
Delphi-Quellcode:
Zitat:
Zeig mal deinnen Code.

DMonkey 19. Mai 2010 05:54

Re: Savetofile Problem
 
gadlist is meine TStringlist und
pfad:= ExtractFilePath(Application.Exename);(dateipfad)
Speichern:
Delphi-Quellcode:
try
   if not DirectoryExists(pfad+'System\Config\gads.cf') then
   ForceDirectories(pfad+'System\Config');
   gadlist.lines.SaveToFile(pfad+'System\Config\gads.cf');
 except
 end;
Laden:
Delphi-Quellcode:
try
   gadlist.lines.loadfromFile(pfad+'System\Config\gads.cf');
 except
end;

mkinzler 19. Mai 2010 06:46

Re: Savetofile Problem
 
Sollte wohl eher
Delphi-Quellcode:
if not DirectoryExists(pfad+'System\Config') then
heissen

himitsu 19. Mai 2010 07:33

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:
try
   ...
except
  {nix}
end;
oder Dergleichen,
Delphi-Quellcode:
try
   ...
except
  Result := False;
end;
wo die Fehlermeldung einfach so ignoriert wird.



Und welchen Wert hat "pfad"?

Zitat:

Zitat von mkinzler
Sollte wohl eher ... heissen

Könnte auch ganz entfallen, da ForceDirectories dieses intern auch prüft.

ForceDirectories = prüfe nach, ob Verzeichnis existiert und wenn nicht, dann erstelle es

Luckie 19. Mai 2010 07:35

Re: Savetofile Problem
 
@himitsu: Ich kaufe ein "E" und will lösen "Exceptions". :mrgreen:

DMonkey 19. Mai 2010 13:06

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.

Luckie 19. Mai 2010 13:17

Re: Savetofile Problem
 
Dann gib doch die Stringliste nach dem Speichern mal frei, wie ich gesagt habe, und guck, was passiert.

DMonkey 19. Mai 2010 13:24

Re: Savetofile Problem
 
Funktioniert Nicht,denn er kann die datei immernoch nicht reinladen

himitsu 19. Mai 2010 13:29

Re: Savetofile Problem
 
Wie gesagt, an dem SaveToFile sollte es nicht liegen.

Delphi-Quellcode:
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;
Gleiches bei LoadFromFile, also liegt es nicht an den beiden Methoden,
und du solltest den Fehler auch mal an anderer Stelle suchen.
(unter Umständen kann dieses auch der Virenscanner sein)

Luckie 19. Mai 2010 13:34

Re: Savetofile Problem
 
Boah, ich habe keine Ahnung, was du da mit der Stringliste machst:

Delphi-Quellcode:
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;
Es könnten noch kleinere Fehler drin sein. Habe das nur mal eben in Notepad runtergetippt.

DMonkey 19. Mai 2010 13:57

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?

Luckie 19. Mai 2010 14:00

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?

DMonkey 19. Mai 2010 14:03

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?

DeddyH 19. Mai 2010 14:04

Re: Savetofile Problem
 
Althergebracht mit AssignFile etc. oder mit Streams ginge das auch. Ich glaube allerdings nicht, dass das Dein Problem lösen wird.

Luckie 19. Mai 2010 14:05

Re: Savetofile Problem
 
Man könnte noch die alten Pascal Routinen mit Delphi-Referenz durchsuchenAssignFile probieren.

DMonkey 19. Mai 2010 14:08

Re: Savetofile Problem
 
das geht ja net auf geöffnete datein

DMonkey 19. Mai 2010 14:09

Re: Savetofile Problem
 
Wäre es nicht auch eine Möglichkeit mein programm komplett zu beenden also prozess killen?

DeddyH 19. Mai 2010 14:10

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.

DMonkey 19. Mai 2010 14:16

Re: Savetofile Problem
 
naja der fehler liegt einfach dabei,dass mein programm die datei nicht wieder freigibt und noch weiter mit ihr läuft

DeddyH 19. Mai 2010 14:19

Re: Savetofile Problem
 
Hast Du die Datei denn noch anderweitig geöffnet? Zeig doch mal etwas mehr Code.

DMonkey 19. Mai 2010 14:23

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

DeddyH 19. Mai 2010 14:25

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?

DMonkey 19. Mai 2010 14:29

Re: Savetofile Problem
 
also eine .txt datei in der dateipfade zu bildern sind und dann werden timages erstellt um die anzuzeigen

DeddyH 19. Mai 2010 14:31

Re: Savetofile Problem
 
Das kann aber nicht der Grund sein, wenn Du diese Textdatei mit LoadFromFile einliest. Danach ist sie nicht mehr im Gebrauch.

DMonkey 19. Mai 2010 14:39

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 15:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz