Autor |
Beitrag |
Abe.L
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
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:= 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 = 0) or (NumWritten <> NumRead); closefile(q); closefile(z); end;
end. |
Moderiert von Narses: Delphi-Tags hinzugefügtModeriert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 02.02.2009 um 12:48
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 13:57
Was hast du denn schon zur Fehlersuche unternommen? Und was hast du dabei festgestellt?
|
|
Abe.L 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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ß:
Delphi-Quelltext 1: 2: 3: 4:
| BlockRead(q, Buf, SizeOf(Buf), NumRead); BlockWrite(z, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); closefile(q); closefile(z); |
auch erhalten. Nur das gewünschte Verzeichnis "2009\" wird nicht erstellt.
Gruß Alfred
Moderiert von matze: Delphi-Tags hinzugefügt
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 14:58
Entweder bin ich blind, oder da steht nirgends ein Befehl, der das Verzeichnis erstellt.
|
|
Abe.L 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
|
Verfasst: Mo 02.02.09 15:36
Wie wird der Startpfad gesetzt?
|
|
Abe.L 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
|
Verfasst: Mo 02.02.09 17:16
Was erwartest du, liefert dir GetDir zurück? Und was liefert es tatsächlich zurück?
|
|
Abe.L 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
|
Verfasst: 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
|
Verfasst: Mo 02.02.09 18:06
Abe.L hat folgendes geschrieben : | 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
|
Verfasst: Mo 02.02.09 18:08
Deswegen ja mein dezenter Vorschlag 
|
|
Abe.L 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 02.02.09 21:08
@ DeddyH
folgende Anweisung: ExtractFilePath(ParamStr(0)) werde ich morgen testen.
In TurboPascal lautet sie:
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 matze: Delphi-Tags hinzugefügt
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 21:23
Das kann sein, ich hab sogar noch TP7 installiert, aber das ist einfach zu lange her 
|
|
Maisinator
      
Beiträge: 167
Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 167
Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 11.02.09 17:56
Das ist ja etwas anderes...
Andere Frage, neues Thema.
Zum Beispiel geht das mit TStringList:  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.)
|
|