Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ordner automatisch erstellen? (https://www.delphipraxis.net/4651-ordner-automatisch-erstellen.html)

Stephan 7. Mai 2003 18:07


Ordner automatisch erstellen?
 
Hi,

wenn ich z.B. per Memo1.lines.savetofile eine Datei speichere (z.B. in c:\irgendwas\ass\fjk) speicher, kommt ja normalerweise der Fehler, dass der Ordner nicht existiert. Aber wie kann ich die Ordner automatisch erstellen lassen? Also schon vor dem speichern die Ordner erstellen. Das geht mit mkdir. Aber wie kann ich das hier bei mehreren Verzeichnissen machen?

viele Grüße

Stephan

Duffy 7. Mai 2003 18:11

Hallo Stephan,
das Zauberwort heißt "ForceDirectories"
Zitat:

Die Funktion erstellt ein neues Verzeichnis (bei Bedarf werden auch die übergeordneten Verzeichnisse angelegt).
bye

Alexander 7. Mai 2003 18:11

du musst das wohl abfangen und den String dann zerlegen oder du nimmst ein Save-Dialog...
Einfacher geht das glaub ich nicht.
Wenn du den String zerlegen willst, kuck dir am besten mal POS und COPY in der Hilfe an.

ssach 7. Mai 2003 18:13

hy,

du musst sie mit nem savedialog (savedialog in die form einbinden) speichern :

Delphi-Quellcode:
if Savedialog.Execute then
   memo1.Lines.Savetofile(SaveDialog.Filename);
das wars schon, jetzt wenn du dies in einen button einbindest geht ein dialog auf wie in den meisten gaengisten programmen!

cu

City Light 7. Mai 2003 18:15

Delphi-Quellcode:
Zu diesem Beispiel gehören eine Beschriftung (Label) und eine Schaltfläche. Nach einem Klick auf die Schaltfläche werden ausgehend vom aktuellen Pfad alle Verzeichnisse angelegt, die noch nicht existieren. Die Ergebnisse werden im Beschriftungstext ausgegeben.

procedure TForm1.Button1Click(Sender: TObject);

var
  Dir: string;
begin

  Dir := 'C:\APPS\SALES\LOCAL';

  if ForceDirectories(Dir) then
    Label1.Caption := Dir + ' wurde erstellt.'

end;

Alexander 7. Mai 2003 18:28

mhm das mit dem ForceDirectory kannte ich auch noch nicht...
Werde gleich mal meine Programme überarbeiten gehen und das einbauen...
Habe es vorher auch so umständlich gemacht wie beschierben

City Light 7. Mai 2003 18:43

Hallo ich noch mal ,ich hab hier noch mal was geschrieben wie es aussehen müßte. Habs jetzt aber nicht getestet!!!

Wichtig

Rufe ForceDirectories nicht mit einem leeren String auf. Dies kann dazu führen, daß ForceDirectories eine Ausnahme auslöst.

Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  if DirectoryExists('C:\irgendwas\ass\fjk') then
  begin
    Memo1.Lines.LoadFromFile('C:\irgendwas\ass\fjk' + 'Dateinamen.txt');
  end
   else
   begin  
     ForceDirectories('C:\irgendwas\ass\fjk');
     Memo1.Lines.LoadFromFile('C:\irgendwas\ass\fjk' + 'Dateinamen.txt');
   end;
end;

S - tefano 7. Mai 2003 19:06

Hi City Light,

das ForceDirector(y/ies; war jetzt zu faul die Hilfe um den richtigen Namen zu bemühen) hast du ja richtig eingebunden, aber funktionieren wirds trotzdem nicht.
Du erstellst zwar den Ordner, wenn er noch nicht existiert, aber die Datei wird dann trotzdem nicht da sein. Da müsste das LoadFromFile dann ne Exeption auslösen, denk ich.

Bis dann,

S - tefano

P.S.: Coole Funktion übrigens (also dieses ForceDirectory), kannte ich auch noch nich. Gleich mal ausprobiern... :coder:

City Light 7. Mai 2003 19:11

ja stimmt *ggg* hab daran gar nicht mehr gedacht *logisch*
Danke
:oops:

S - tefano 7. Mai 2003 19:30

Moakt nix.
War vielleicht auch n bissken zu spitzfindig von mir.

S - tefano

Marco Haffner 7. Mai 2003 22:01

Wäre da nicht folgendes kürzer?
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  if not DirectoryExists('C:\irgendwas\ass\fjk') then
  begin
    ForceDirectories('C:\irgendwas\ass\fjk');
  end;
  Memo1.Lines.SaveToFile('C:\irgendwas\ass\fjk' + 'Dateinamen.txt');
end;

Brüggendiek 7. Mai 2003 22:22

Hallo!

Noch kürzer ist:
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  ForceDirectories('C:\irgendwas\ass\fjk\');
  Memo1.Lines.SaveToFile('C:\irgendwas\ass\fjk\' + 'Dateinamen.txt');
end;
(den '\' zwischen Verzeichnis und Dateimanen nicht vergessen, gelle!)

ForceDirectories legt die angegebenen Dirs an, wenn es nötig ist. Existiert schon alles, ist es nicht nötig und es geschieht nichts!

Persönlich schreibe ich bei sowas übrigen immer so:
Delphi-Quellcode:
const verzeichnis = 'C:\irgendwas\ass\fjk\';

procedure TForm1.ButtonClick(Sender: TObject);

begin
  ForceDirectories(verzeichnis);
  Memo1.Lines.SaveToFile(verzeichnis + 'Dateinamen.txt');
end;
Vorteile:
1. Sicherheit vor Tippfehlern
2. Bei Änderungen des Verzeichnisses nur 1 Änderung für alle Stellen, wo das benutzt wird.

Gruß

Dietmar Brüggendiek

Marco Haffner 7. Mai 2003 22:49

Zitat:

Zitat von Brüggendiek
Hallo!

Noch kürzer ist:
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  ForceDirectories('C:\irgendwas\ass\fjk\');
  Memo1.Lines.SaveToFile('C:\irgendwas\ass\fjk\' + 'Dateinamen.txt');
end;
(den '\' zwischen Verzeichnis und Dateimanen nicht vergessen, gelle!)
...
...
Persönlich schreibe ich bei sowas übrigen immer so:
Delphi-Quellcode:
const verzeichnis = 'C:\irgendwas\ass\fjk\';

Stimmt, Delphi überprüft es ja selbst... wenn man halt nicht am eigenen Rechner sitzt. :oops:
Ja im Eifer des Gefechts kann man auch mal etwas übersehen.
Besonders wenn man klau... ähh, kopiert. :angle:
Ich bevorzuge es auch Ordner oder Dateinamen nur einmal anzugeben, aber wie schon gesagt...

Stephan 7. Mai 2003 22:52

Hi,

thx, hat wunderbar funktioniert! :P

viele Grüße

Stephan


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 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