Autor Beitrag
Abe.L
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.02.09 13:46 
Anfänger bitte um Hilfestellung.

Ich möchte mit u.a. Code ein Verzeichnis "2009" auf Existenz überprüfen. Sollte das Verzeichnis "2009" nicht existieren, soll das Verzeichnis "2009" erstellt werden und mit dem Inhalt aus dem Verzeichnis "2008" gefüllt werden.
Im Debugmodus läuft der Code durch, das fehlende Verzeichnis wird aber nicht erstellt.

Gruß Alfred
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
begin
 DecodeDateDay(Date,jj,tt);
 str(jj,mjahr);
 dec(jj);
 str(jj,TempStr);
 GetDir(0,StartPfad);
 {MDatei:= Mitgliedsdatei;}
 MDatei:= Startpfad +'\'+ mjahr +'\'+ Mitgliedsdatei;
 assignfile(f,MDatei);
 {$I-}
 reset(F);

 if ioresult = 0 then  
 closefile(F)   
 else

  begin
  MTempDatei:= Startpfad +'\'+ tempstr +'\'+ Mitgliedsdatei;
  assignfile(q,MTempdatei);
  MDatei:= Startpfad +'\'+ mjahr+'\'+MitgliedsDatei;
  assignfile(z,mdatei);
  reset(q,1);
  rewrite(z,1);
  repeat
  BlockRead(q, Buf, SizeOf(Buf), NumRead);
  BlockWrite(z, Buf, NumRead, NumWritten);
  until (NumRead = 0or (NumWritten <> NumRead);
  closefile(q); closefile(z);
  end;

end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 02.02.2009 um 12:48
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 13:57 
Was hast du denn schon zur Fehlersuche unternommen? Und was hast du dabei festgestellt?
Abe.L Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.02.09 14:45 
Hallo Luckie,

wie schon erwähnt, läuft das Programm im Einzelschrittmodus (F7) ohne Fehlermeldung durch. Die verschiedenen Dateien (MDatei, MTempDatei usw.) werden wie gewünscht erzeugt und bleiben bis zum Schluß:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  BlockRead(q, Buf, SizeOf(Buf), NumRead);
  BlockWrite(z, Buf, NumRead, NumWritten);
  until (NumRead = 0or (NumWritten <> NumRead);
  closefile(q); closefile(z);


auch erhalten. Nur das gewünschte Verzeichnis "2009\" wird nicht erstellt.

Gruß Alfred

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 14:58 
Entweder bin ich blind, oder da steht nirgends ein Befehl, der das Verzeichnis erstellt.
Abe.L Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.02.09 15:32 
Schande, Schande wenn man mit dem Kopf darauf gestossen werden muss.
Trotzdem vielen Dank

Gruß Alfred
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 15:36 
Wie wird der Startpfad gesetzt?
Abe.L Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.02.09 16:44 
über GetDir:

GetDir(0,Startpfad);

var Startpfad :String;
GetDir(0= das Standardlaufwerk, Startpfad= eine Stringvariante);
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 17:16 
Was erwartest du, liefert dir GetDir zurück? Und was liefert es tatsächlich zurück?
Abe.L Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.02.09 17:35 
GetDir liefert mir den kompletten DirPfad als String zurück. Diesen String hab ich dann in seine Teile zerlegt.

C:\Verzeichnisname\Programmexe
Char:\String\String

Laufwerksname als Char:
Verzeichnisname als String:
Programmextend als String:

diese Teile kann ich dann bei Bedarf weiter verarbeiten.


Gruß Alfred
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 17:39 
Dann wechsel mal in der Eingabeaufforderung das Verzeichnis und ruf Dein Programm von dort aus auf.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 18:06 
user profile iconAbe.L hat folgendes geschrieben Zum zitierten Posting springen:
GetDir liefert mir den kompletten DirPfad als String zurück.

Das GetDir einen Pfad zurückliefert war irgendwie klar. Die große Frage ist WAS für einen Pfad. Les das noch mal in der Dokumentation nach. Und dann behalt mal im Hinterkopf, dass das aktuelle Verzeichnis nicht zwingend das verzeichnis deiner Exe sein muss.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 18:08 
Deswegen ja mein dezenter Vorschlag ;)
Abe.L Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.02.09 18:39 
Erstmal Danke für die Antworten.
Es ist mir schon klar dass es elegantere Lösungen gibt, mit denen man eine Datei auch aus einem anderen Startverzeichnis bearbeiten kann. Aber wie schon erwähnt bin ich ein ziemlicher Laie in Punkto Delphi.
Ich möchte ein ca. 12 Jahre altes Dosprogramm welches in Turbo-Pascal 7 geschrieben wurde, und speziell auf die Belange meines Gartenvereins ausgelegt ist, für Windows XP lauffähig umschreiben. Da meine letzten Programmierversuche auch schon über 10 Jahre zurückliegen tue ich mich etwas schwer.
Wenn ihr mir eine komfortablere Lösung für das Startverzeichnis vorschlagen könnt wäre ich natürlich dankbar.

Gruß Alfred
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 18:49 
Es soll ja das Verzeichnis sein, in dem das Programm liegt, habe ich das richtig verstanden? Das bekommst Du entweder mit ExtractFilePath(Application.Exename) oder ExtractFilePath(ParamStr(0)).
Abe.L Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.02.09 21:08 
@ DeddyH

folgende Anweisung: ExtractFilePath(ParamStr(0)) werde ich morgen testen.
In TurboPascal lautet sie:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
   startpfad, Verzeichnis, Progname, Progext = String

startpfad:= paramstr(0);
startpfad:= Fexpand(startpfad);
FSsplit(startpfad,Verzeichnis,Progname,Progext);



Gruß Alfred

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.02.09 21:23 
Das kann sein, ich hab sogar noch TP7 installiert, aber das ist einfach zu lange her ;)
Maisinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Di 10.02.09 21:36 
hab das gleiche problem. möchte beim starten des progs überprüfen, ob ein verzeichnis (txt-datei) besteht und wenn nein, es erstellen lassen und nicht die fehlermeldung mit "... existiert net" bekommen.
aber irgenwie blick ich da net ganz durch was hier steht; kann mir das mal jemand erleutern oder gibt es auch einfachere wege??? was müsste ich dann in mein prog schreiben?
THX
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 10.02.09 21:55 
Für das Erstellen eines Verzeichnisses gibt es CreateDir (Delphi) oder CreateDirectory (API), falls nicht nur der unterste Ordner erstellt werden soll, dann gibt es ForceDirectories.

Falls du testweise in dem Verzeichnis deiner Exe arbeiten willst, kannst du diesen Ordner via ExtractFilePath(ParamStr(0)) bekommen.
Maisinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Mi 11.02.09 15:38 
danke , dass hab ich jetzt auch so weit hinbekommen. wie kann ich anstatt von nem ordner ne txt-datei damit erstellen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 11.02.09 17:56 
Das ist ja etwas anderes...
Andere Frage, neues Thema. ;-)

Zum Beispiel geht das mit TStringList: ;-)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  MyFile: TStringList;
begin
  MyFile := TStringList.Create;
  try
    MyFile.Add('XY');
    MyFile.SaveToFile...
  finally
    MyFile.Free;
  end;
end;


Falls es Einstellungen für dein Programm sein sollen, dann ist auch noch die Wahl des richtigen Verzeichnisses ein Thema:
www.delphi-library.d...ewtopic.php?p=548600
(Es sei denn es handelt sich um eine portable nie normal auf einem PC fest installierte Software.)