Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie erstelle ich ein aktuelles Dateiverzeichnis (https://www.delphipraxis.net/94742-wie-erstelle-ich-ein-aktuelles-dateiverzeichnis.html)

Willi1960 26. Jun 2007 12:01


Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Hallo,

ich habe ein Problem.

ich möchte gerne eine Textdatei in ein Unterverzeichnis schreiben, doch das geht so ohne weiteres nicht, weil ich dazu einen gültige Pfad erstellen muß ? :gruebel:

Ich habe folgenden Code


Delphi-Quellcode:
  {$i-}
   mkdir('c:\jowisoft');
   mkdir('c:\jowisoft\kasse');
   mkdir('c:\jowisoft\kasse\kassendaten');
   {$i+}
   assignfile(f,'c:\jowisoft\kasse\kassendaten\bondaten.txt');
   rewrite(f);
   for i:=1 to 6 do writeln(f,bonzeile[i]);
   writeln(f,bonstadt);
   writeln(f,bonmwst);
   closefile(f);
   {$i+}
beim Programmablauf erscheint dann der Fehler Programmname nicht gültig

Wer kann mir helfen ?

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

lbccaleb 26. Jun 2007 12:04

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
schau mal hier, ungefähr so??:


neuer ordner


und hier

datei schreiben

Willi1960 26. Jun 2007 12:12

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Hallo,

Danke für den Tip, aber die Ordner sind bereits erstellt. Der Quelltext will einfach die Datei nicht in die unterordner hineinschreiben. Wenn ich den gleichen Quellcode in das Hauptverzeichnis schreibe funktioniert es.

:roll:

RavenIV 26. Jun 2007 12:25

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Zitat:

Zitat von Willi1960
Hallo,

Danke für den Tip, aber die Ordner sind bereits erstellt. Der Quelltext will einfach die Datei nicht in die unterordner hineinschreiben. Wenn ich den gleichen Quellcode in das Hauptverzeichnis schreibe funktioniert es.

:roll:

Erste Idee:
Wenn die Ordner bereits angelegt sind, vielleicht stimmen dann die Rechte nicht?
Darfst Du (Deine Software) in diese Ordner schreiben, Dateien anlegen, Dateien verändern?

Zweite Idee:
Versuch mal bei AssignFile die Backslashes als Doppel-Backslash anzugeben
AssignFile (..., 'C:\\temp\\sonstwas\datei,txt');

CCRDude 26. Jun 2007 12:28

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Zum Ordner-Anlegen: ForceDirectories dürfte da besser geeignet sein, da es gleich mehrere Ebenen auf einmal anlegt und man nicht mit $I rumspielen muss ;)

Luckie 26. Jun 2007 12:42

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Zitat:

Zitat von RavenIV
Versuch mal bei AssignFile die Backslashes als Doppel-Backslash anzugeben
AssignFile (..., 'C:\\temp\\sonstwas\datei,txt');

Und warum das? Wir progarmmieren hie rin Delphi und nicht in C, wo "\" ein Steuerzeichen markiert.

Hawkeye219 26. Jun 2007 12:51

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Hallo,

Zitat:

Zitat von Hilfe zu MkDir
Mit dem Compiler-Schalter {$I+} können Laufzeitfehler durch Exceptions behandelt werden. Wird {$I-} verwendet, muß explizit mit IOResult auf E/A-Fehler geprüft werden.

Der Versuch, ein bereits bestehendes Verzeichnis erneut zu erzeugen, löst einen Laufzeitfehler aus, den du durch den Compilerschalter {$i-} unterdrückst. Solange du diese Fehlercodes nicht mit IOResult abfragst, bleiben sie stehen und verhindern die Ausführung weiterer Ein-/Ausgabeoperationen.

Also: folge dem Vorschlag von CCRDude.

Gruß Hawkeye

Chemiker 26. Jun 2007 12:56

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Hallo Willi1960,


Vielleicht hilft dir das weiter:


Delphi-Quellcode:
var
  OrdnerName: String;
  DateiName: String;
  f: TextFile;
begin
  OrdnerName:= 'h:\jowisoft\kasse\kassendaten\';
  DateiName:= 'bondaten.txt';
  ForceDirectories(OrdnerName);

  AssignFile (f, OrdnerName+DateiName);
  {$I-}
  Rewrite (f);
  {$I+}
  If IOResult = 0 then
  begin
    Writeln (f, 'Test');
    // Deine Daten
    closefile(f);
  end;

end;
Fehlerbehandlung usw. fehlen.

Bis bald Chemiker

Willi1960 26. Jun 2007 19:27

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Hallo,
funktioniert leider auch nicht vielleicht muß ich mit chdir das aktuelle verzeichnis wecheln, ich habe das auch schon probiert, geht aber auch nicht. und forcedirectoriers erzeugt sofort eine fehlermeldung :wall:

lbccaleb 26. Jun 2007 19:40

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
was für ne delphi version benutzt du??

Willi1960 26. Jun 2007 19:49

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
hallo
ich habe das jetzt mal alles abgeändert aber es will immer noch nicht funktionieren
Delphi-Quellcode:

procedure TForm3.Button2Click(Sender: TObject);
var
   f: TextFile;
   i: integer;
begin
  {$I-}
  mkdir('c:\jowisoft');
  mkdir('c:\jowisoft\kasse');
  mkdir('c:\jowisoft\kasse\kassendaten');
  {$i+}
  if ioresult=0 then i:=i+1;  {dient einfach nur zur abfrage von ioresult}
  AssignFile (f,'c:\jowisoft\kasse\kassendaten\bondaten.txt');
  {$I-}
  Rewrite (f);
  {$I+}
  If (IOResult = 0) or (ioresult <>0) then
  begin
    Writeln (f, 'Test');
    closefile(f);
  end;
end;
[edit=MrSpock]Code Tag geschlossen. Mfg, MrSpock[/edit]

lbccaleb 26. Jun 2007 19:54

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Delphi-Quellcode:
procedure TForm3.Button2Click(Sender: TObject);
var
f: TextFile;
i: integer;
begin
{$I-}
mkdir('c:\jowisoft');
mkdir('c:\jowisoft\kasse');
mkdir('c:\jowisoft\kasse\kassendaten');
{$i+}
if ioresult=0 then i:=i+1; {dient einfach nur zur abfrage von ioresult}   //wozu das??? hat keinen sinn
AssignFile (f,'c:\jowisoft\kasse\kassendaten\bondaten.txt');
{$I-}
Rewrite (f);
{$I+}
If (IOResult = 0) or (ioresult <>0) then //was soll denn das?? wenn ioresult = 0 oder <> 0 dann mache... das blödsinn
begin
Writeln (f, 'Test');
closefile(f);
end;
end;

Willi1960 26. Jun 2007 19:57

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
natürlich stelle ich das auf ioresult =0 um, aber das programm kommt ja gar nicht so weit bei rewrite steigt das programm aus b.z.w die prozedur wird nicht weiter fortgeführt

lbccaleb 26. Jun 2007 20:11

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Delphi-Quellcode:
uses
  sysutils; // <-- das muss unbedinkt oben in die uses klausel


procedure TForm3.Button2Click(Sender: TObject);
const
  thepath = 'c:\jowisoft\kasse\kassendaten\';
  thefile = 'bondaten.txt';
var
  F: TextFile;
  S: string;
begin
  if not DirectoryExists(thepath) then
    ForceDirectories(thepath);
  try
    AssignFile(F, thepath + thefile);
    Reset(F);

//reset wenn die datei "bondaten.txt" bereits vorhanden ist und rewrite wenn sie neu erstellt werden soll

    Writeln(F, 'Test');
  finally
    CloseFile(F);
  end;
end;

ansonnsten kann ich dir auch nur emfehlen hier mal ein wenig in der codelib rum zu schnüffeln oder was sowieso auch gerade in solchen fällen gut ist, mal die delphi hilfe benutzen... da steht das auch alles drin, mit bsp und quellcode

marabu 26. Jun 2007 20:23

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Hallo Willi,

wenn dein ReWrite() schon nicht ausgeführt wird, dann solltest du mal den FehlerCode anschauen. Vielleicht hast du die Datei ja zur Erfolgskontrolle in einem Editor offen, was den exklusiven Zugriff verhindert.

Statt TextFile kannst du auch problemlos mit dem moderneren FileStream arbeiten:

Delphi-Quellcode:
resourcestring
  JOWI_DIR = 'C:\JoWiSoft\Kasse\KassenDaten';
  JOWI_FILE = 'BonDaten.txt';

procedure WriteLine(s: TStream; const line: string);
begin
  s.Write(line[1], Length(line));
  s.Write(sLineBreak[1], Length(sLineBreak));
end;

procedure TDemoForm.TestButtonClick(Sender: TObject);
var
  s: TStream;
  fn: TFileName;
begin
  if not DirectoryExists(JOWI_DIR) then
    ForceDirectories(JOWI_DIR);
  fn := IncludeTrailingPathDelimiter(JOWI_DIR) + JOWI_FILE;
  s := TFileStream.Create(fn, fmCreate);
  WriteLine(s, 'success finally');
  s.Free;
end;
Getippt und nicht getestet.

Grüße vom marabu

Chemiker 26. Jun 2007 21:45

Re: Wie erstelle ich ein aktuelles Dateiverzeichnis
 
Hallo Willi1960,

wir kommen hier so nicht weiter. Beantworte erst mal folgende Fragen!

1. Delphi-Version?

Zitat:

Zitat von lbccaleb
was für ne delphi version benutzt du??

2. Welche Rechte?
Zitat:

Zitat von RavenIV
Wenn die Ordner bereits angelegt sind, vielleicht stimmen dann die Rechte nicht?
Darfst Du (Deine Software) in diese Ordner schreiben, Dateien anlegen, Dateien verändern?


3.Stehen noch Laufzeitfehler an?

Zitat:

Zitat von Hawkeye219
Der Versuch, ein bereits bestehendes Verzeichnis erneut zu erzeugen, löst einen Laufzeitfehler aus, den du durch den Compilerschalter {$i-} unterdrückst. Solange du diese Fehlercodes nicht mit IOResult abfragst, bleiben sie stehen und verhindern die Ausführung weiterer Ein-/Ausgabeoperationen.

4. Wo treten die Fehlermeldungen auf?


Zitat:

Zitat von marabu
wenn dein ReWrite() schon nicht ausgeführt wird, dann solltest du mal den FehlerCode anschauen. Vielleicht hast du die Datei ja zur Erfolgskontrolle in einem Editor offen, was den exklusiven Zugriff verhindert..


5. Welches Windows?


Bis bald Chemiker


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