AGB  ·  Datenschutz  ·  Impressum  







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

SaveDialog - Add statt Overwrite

Ein Thema von Z4ppy · begonnen am 14. Mai 2008 · letzter Beitrag vom 15. Mai 2008
Antwort Antwort
Seite 2 von 2     12   
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

Re: SaveDialog - Add statt Overwrite

  Alt 14. Mai 2008, 19:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

Re: SaveDialog - Add statt Overwrite

  Alt 14. Mai 2008, 19:35
Zitat:
Edit: Btw: fmCreate entspricht praktisch fmOpenReadWrite, mit dem Unterschied, dass die Datei erstellt wird, wenn sie nicht existiert.
Falsch!! fmCreate legt die Datei an wenn sie noch nicht existiert und wenn sie existiert wird der Dateiinhalt gelöscht!

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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: SaveDialog - Add statt Overwrite

  Alt 14. Mai 2008, 20:53
Zitat von NamenLozer:
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.
Bei allem rumgerate ist nicht ein einziges Mal compilermagic mit dabei.

Write() will die Daten direkt haben, also direkt das erste Zeichen - oder - beim PChar auch das erste Zeichen und nicht den Pointer, somit dereferenzieren.
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: SaveDialog - Add statt Overwrite

  Alt 15. Mai 2008, 20:14
@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

Vorschläge?

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#15

Re: SaveDialog - Add statt Overwrite

  Alt 15. Mai 2008, 20:36
Versuche es so:
lStream := TFileStream.Create(YourFileName, fmOpenWrite or fmShareDenyNone); 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.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: SaveDialog - Add statt Overwrite

  Alt 15. Mai 2008, 21:18
Danke, geht aber leider auch net... Selber Fehler

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#17

Re: SaveDialog - Add statt Overwrite

  Alt 15. Mai 2008, 21:26
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?
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: SaveDialog - Add statt Overwrite

  Alt 15. Mai 2008, 21:34
Also... Ich hab das jetz so gemacht:
Delphi-Quellcode:
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;
Diese Prozedur ruf ich dann bei nem Button-Klick auf mit dem entsprechenden string und dem Dateinamen...
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...
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#19

Re: SaveDialog - Add statt Overwrite

  Alt 15. Mai 2008, 21:58
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.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: SaveDialog - Add statt Overwrite

  Alt 15. Mai 2008, 22:09

Danke dir, das war die Lösung

MfG Z4ppy
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16:59 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