Re: SaveDialog - Add statt Overwrite
Mal mit s[1] probiert? Ggf. auch mal pchar(s)^ probieren. Sry für das rumgerate, ich steh immer etwas auf dem Schlauch, was genau in Delphi als Pointer behandelt wird und was nicht, und was per Compilermagic umgewandelt wird.
Edit: Btw: fmCreate entspricht praktisch fmOpenReadWrite, mit dem Unterschied, dass die Datei erstellt wird, wenn sie nicht existiert. |
Re: SaveDialog - Add statt Overwrite
Zitat:
Streams sind aus meiner Sicht schon der richtige Weg. Denn wenn man Objectpascal verwendet, warum sollte man dann nicht die vorhandenen Klassen nutzen sondern globale Funktionen?!
Delphi-Quellcode:
var lStream: TFileStream;
lText: String; begin lStream := TFileStream.Create(YourFileName, fmOpenReadWrite); try lStream.Position := lStream.Size; lText := 'Dein Text'#13#10; lStream.write(lText[1], Length(lText)); finally lStream.Free; end; |
Re: SaveDialog - Add statt Overwrite
Zitat:
Write() will die Daten direkt haben, also direkt das erste Zeichen - oder - beim PChar auch das erste Zeichen und nicht den Pointer, somit dereferenzieren. |
Re: SaveDialog - Add statt Overwrite
@SirThornberry: Danke für deinen Vorschlag... Leider erhalte ich immer "Der Prozess konnte nicht auf die Datei 'bla.txt' zugreifen, weil sie von einem anderen Prozess verwendet wird." Wenn ich nun mit Unlocker schaue, welcher Prozess das ist, dann ist es die Project1.exe... Ein Prozess kann also nicht auf die Datei zugreifen, weil er sie selber verwendet :wall: :wall: :wall:
Vorschläge? MfG Z4ppy |
Re: SaveDialog - Add statt Overwrite
Versuche es so:
Delphi-Quellcode:
Mit dem fmShareDenyNone erlaubst du anderen Prozessen (auch dein eigenen) diese Datei erneut zu öffnen. Außerdem würde ich bei "nur"-Schreibvorgang fmOpenWrite und nicht fmOpenReadWrite nehmen.
lStream := TFileStream.Create(YourFileName, fmOpenWrite or fmShareDenyNone);
|
Re: SaveDialog - Add statt Overwrite
Danke, geht aber leider auch net... Selber Fehler :wall:
MfG Z4ppy |
Re: SaveDialog - Add statt Overwrite
Wenn du die Datei noch wo anders in deinem Programm öffnest, musst du dort natürlich auch den Flag fmShareDenyNone angeben. Wenn du an der anderen Stelle fmShareExclusive verwendest, bringt dich auch kein ShareDenyNone was. Außerdem, wenn du die Datei bereits offen hast, warum benutzt du dann nicht das selbe Handle um hineinzuschreiben?
|
Re: SaveDialog - Add statt Overwrite
Also... Ich hab das jetz so gemacht:
Delphi-Quellcode:
Diese Prozedur ruf ich dann bei nem Button-Klick auf mit dem entsprechenden string und dem Dateinamen...
procedure AddStringToFile(const s: string; const filename: string);
var lStream: TFileStream; lText: String; begin lStream := TFileStream.Create(filename, fmOpenWrite or fmShareDenyNone); try lStream.Position := lStream.Size; lText := #13#10+s; lStream.write(lText[1], Length(lText)); finally lStream.Free; end; end; Vor dem Aufruf der Prozedur überprüf ich noch, ob die Datei besteht - wenn nicht, wird sie erstellt. Ist das evtl. der Knackpunkt? MfG Z4ppy [ADD] Wenn ich das nun mit einer Datei aufrufe, die bereits existiert, geht alles tadellos... Aber wenn ich einen Dateinamen angebe beim SaveDialog, der nicht existiert, wird die Datei zunächst erstellt und dann kommt die Fehlermeldung... |
Re: SaveDialog - Add statt Overwrite
Hm, dann rate ich mal: der fehler liegt beim Erstellen der Datei. Ohne ein wenig Quelltext kann man dir da aber nicht helfen. Ich könnte jetzt raten und sagen: du erstellst ein TFileStream-Objekt, dass du nicht mehr freigibst.
|
Re: SaveDialog - Add statt Overwrite
:wall::wall::wall::wall::wall::wall:
Danke dir, das war die Lösung :) MfG Z4ppy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 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