Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SaveDialog Filename kleinste freie Nummer (https://www.delphipraxis.net/69688-savedialog-filename-kleinste-freie-nummer.html)

draxion 18. Mai 2006 15:31


SaveDialog Filename kleinste freie Nummer
 
ich bin dabei ein Programm zu schreiben, das Labyrinthe erstellt.
Diese sollen später gespeichert und wieder geladen werden können.
Beim Speichern habe ich nun folgendes Problem:

Die Labyrinthe sollen mit einem SaveDialog in eine txt-Datei gespeichert werden.
Ich möchte jetzt, dass ein Dateiname vorgeschlagen wird, der von den anderen Dateinamen (in dem Ordner) abhängt!
Bsp: Wenn es in dem Ordner schon die Dateien "Labyrinth_1.txt","Labyrinth_2.txt" und "Labyrinth_3.txt" gibt, soll er den Dateinamen "Labyrinth_4" vorschlagen. (Also "Labyrinth_" und dann die kleinste freie Nummer.)

Mein script für diesen Vorgang sieht so aus:
Delphi-Quellcode:
  fertig := false;
  i := 1;
  while not fertig do begin
    if FileExists('save_files\Labyrinth_'+IntToStr(i)+'.txt') then begin
      inc(i);
    end else begin
      SaveDialog1.FileName := 'Labyrinth_'+IntToStr(i)+'.txt';
      SaveDialog1.Execute;
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);
      fertig := true;
    end;
  end;
Wenn man das erste mal auf speichern klickt, passiert genau das richtige, aber beim zweiten (und dritten,...) mal schlägt er IMMER den Namen "Labyrinth_1" vor !!
Was mache ich falsch ?

MFG mathis

[edit=Sharky]Delphi-Tags eingefügt. Mfg, Sharky[/edit]

TeronG 18. Mai 2006 15:35

Re: SaveDialog Filename kleinste freie Nummer
 
Naja .. du frägst ja auch nur einmal, ob es die datei giebt ...
Du könntest statt mit "if FileExists()" mit "while FileExists()" arbeiten.
evtl. auch noch das end else wech machn ...

EDIT: :oops: ok .. vergiss einfach, daß ich gepostet habe :pale:

pacman1986 18. Mai 2006 15:39

Re: SaveDialog Filename kleinste freie Nummer
 
an sich ist dein code richtig! jedenfalls finde ich nichts

könnte es am rest liegen?

mir fällt grad auf hast du abgebrochn oder gespeichert ?

Delphi-Quellcode:
if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
wäre eleganter

jim_raynor 18. Mai 2006 15:43

Re: SaveDialog Filename kleinste freie Nummer
 
Setzte von deinem SaveDialog die Option NoChangeDir auf true. Ich vermute, dass das Arbeitsverzeichnis nach save_files durch den SaveDialog geändert wird. Das true verhindert den Wechsel und dann sollte es auch beim Zweiten mal klappen.

Hawkeye219 18. Mai 2006 15:45

Re: SaveDialog Filename kleinste freie Nummer
 
Hallo,

ich würde bei der Überprüfung mittels FileExists keinen relativen Pfad benutzen. Wer weiß schon, in welchem Pfad Windows dann sucht?

Gruß Hawkeye

draxion 18. Mai 2006 15:57

Re: SaveDialog Filename kleinste freie Nummer
 
Hinsichtlich der ersten beiden Atworten sieht mein script jetzt erstmal so aus:
Delphi-Quellcode:
 
  i := 1;
  while FileExists('save_files\Labyrinth_'+IntToStr(i)+'.txt') do inc(i);
  SaveDialog1.FileName := 'Labyrinth_'+IntToStr(i)+'.txt';
  if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
> wie meinst du mit dem NoChangeDir?, bin noch sehr neu in Delphi
...also wenn ich einfach
SaveDialog1.NoChangeDir := true;
schreibe, bekomm ich einen Fehler:
Undefinierter Bezeichner: 'NoChangeDir' (kann das daran liegen, das es den Befehl bei Delphi 3 noch nicht gibt?)

> und mit dem relativen Pfad,...
Ich finde das so viel praktischer, weil das dann nicht davon abhängt, wo sich die Datei befindet.

[edit=Sharky]Noch einmal Delphi-Tags eingefügt. Bitte mache das bei deinen nächsten Postings selber. Danke. Mfg, Sharky[/edit]

Hawkeye219 18. Mai 2006 17:57

Re: SaveDialog Filename kleinste freie Nummer
 
Zitat:

Zitat von draxion
> und mit dem relativen Pfad,...
Ich finde das so viel praktischer, weil das dann nicht davon abhängt, wo sich die Datei befindet.

Dir ist aber schon bewußt, daß sich eine relative Pfadangabe immer auf den aktuellen Pfad bezieht und nicht auf den Programmpfad? Der aktuelle Pfad ändert sich bereits, wenn man über einen OpenDialog eine Datei aus einem anderen Verzeichnis lädt.

Gruß Hawkeye

draxion 18. Mai 2006 18:09

Re: SaveDialog Filename kleinste freie Nummer
 
es geeeht !!

... Nein, das mit dem Pfad war mir nicht bewusst,
jetzt hab ich es auf den exakten Pfad geändert und es geht !!


Vielen Dank an euch alle
mathis

TeronG 19. Mai 2006 09:00

Re: SaveDialog Filename kleinste freie Nummer
 
Zitat:

Zitat von Hawkeye219
Dir ist aber schon bewußt, daß sich eine relative Pfadangabe immer auf den aktuellen Pfad bezieht und nicht auf den Programmpfad? Der aktuelle Pfad ändert sich bereits, wenn man über einen OpenDialog eine Datei aus einem anderen Verzeichnis lädt.

Abhilfe: ExtractFilePath(ParamStr(0));
Und schon hast du den Pfad in dem seich deine EXE befindet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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-2025 by Thomas Breitkreuz