Autor |
Beitrag |
gone
Hält's aus hier
Beiträge: 15
|
Verfasst: Mo 18.10.04 19:59
Hallo,
ich habe folgenden Quellcode um an den Namen einer Datei noch das Datum und die Uhrzeit anzufügen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TZeit.ExtraBackup(); var datum,uhrzeit : string; begin datum := FormatDateTime('dd:mm:yyyy',date); uhrzeit := FormatDateTime('hh:nn',time); try if Not DirectoryExists('Sicherungen') then MkDir('Sicherungen'); except Showmessage('Der Sicherungsordner konnte nicht erstellt werden!'); end; try CopyFile('Memofeld1.txt', 'Sicherungen\' + datum + '-' + uhrzeit + '-' + 'Memofeld1.txt', False); except Showmessage('Die Memotextdateien konnten nicht kopiert werden!'); end; end; |
Wieso bekomme ich da die Fehlermeldung?
Vielen Dank,
gone
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Mo 18.10.04 20:08
Hallo Gone!
Die Fehlermeldung bei CopyFile kommt, weil das eine Windows-Systemfunktion ist.
Windows kennt keine Strings wie Delphi und deshalb muß der String in einen PChar umgewandelt werden.
Schreibe
Delphi-Quelltext 1:
| CopyFile('Memofeld1.txt', PChar ('Sicherungen\' + datum + '-' + uhrzeit + '-' + 'Memofeld1.txt'), False); |
und der Fehler sollte weg sein.
Bei String-Literalen (also die mit ' einschlossenen Zeichenfolgen) wandelt Delphi das automatisch um. Dein Ziel ist aber ein zusammengesetzter Ausdruck.
Ach ja - bevor weitere Fragen kommen:
Es ist sehr mutig, die Originaldatei ohne Pfadangabe zu schreiben. Wenn irgendein Programm das aktive Directory ändert, kopierst Du alles, nur nicht die gewünschte Datei!
Auch das Ziel der Kopie ist nicht von vornherein festgelegt, da der Pfad relativ zum aktiven Dir ist!
Gruß
Dietmar Brüggendiek
|
|
gone 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mo 18.10.04 20:19
Erst mal vielen Dank!
Also ich bekomme jetzt keinen Fehler mehr, aber die Datei wird nicht angelegt
Kann es was mit dem aktiven Verzeichnis zu tun haben?
Bisher war ich davon ausgegangen, dass die Anwendung, egal was kommt, die Datei immer relativ zur Exe speichert.
Ist dem nicht so? So habe ich jedenfalls den Zusatz von dir verstanden.
Ich bin Anfänger, deswegen kenne ich mich kaum aus!
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mo 18.10.04 21:27
Ich würd mal auf den ":" tippen, weil der in Dateinamen unter Windows nicht vorkommen darf.
Ersetz das ":" in den Formatfunktionen einfach durch ein "_" oder lass es einfach raus
_________________ JSXGraph
|
|
gone 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mo 18.10.04 21:30
Das war es! Vielen Dank euch allen!
Ihr habt mir echt geholfen.
gone
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mo 18.10.04 21:36
Bitte
Und Du kannst den anderen 6490 Usern helfen, in dem Du das kleine grüne Häkchen  rechts oberhalb deines ersten Postings klickst und den Thread so als "erledigt" markierst
raziel
_________________ JSXGraph
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 18.10.04 21:41
Kannst du bitte noch den Thread auf erledigt setzen? Dazu gibt's bei deinem ersten Posting ein grünes Häkchen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Mo 18.10.04 21:50
Hallo gone!
da haben wir ja zwei Probleme!
Erstens: Wenn eine Datei keine Pfadangabe hat, wird sie im aktiven Directory gesucht bzw. angelegt.
Beim Programmstart ist normalerweise das Programmverzeichnis das aktive Dir - aber z.B. ein Open-Dialog verändert das!
Deshalb sollte man immer das Dir vollständig angeben.
Soll das das Programmverzeichnis sein, mußt Du mitverzeichnis:=ExtractFilePath (Paramstr(0));den Wert extrahieren.
Allerdings halte ich es nicht für sehr sinnvoll, die Daten immer im Programmverzeichnis zu speichern!
Unter DOS (also Win95, Win98 und WinME) ist das problemlos, aber unter Windows (WinNT, Win2000, WinXP) geht das normalerweise nur mit Administratorrechten - oder der Admin muß das Programmverzeichnis zum Schreiben freigeben. Der Virenprogger sagt dann "Danke für die Lücke" und verseucht die EXE!
Einstellungen gehören in den "Dokumente und Einstellungen"-Ordner, Benutzerdaten in den Daten-Ordner - bzw. in entsprechende Unterordner davon. Da hat jeder Benutzer automatisch Schreibrecht - und jeder Benutzer kann seine Daten unabhängig von den anderen Benutzern speichern. Weitere Informationen sind über "SHGetSpecialFolderLocation" und "SHGetSpecialFolderPath" zu finden - neben der Suchfunktion des Forums steht da noch das MSDN (Microsoft Software Development Network) online und das PDSK (Platform Software Development Kit) zum Download (sind aber über 300 MByte und läuft nur unter NT/2000/XP!) zur Verfügung.
Zweitens: Schau Dir doch mal Deine Dateinamen an! Vielleicht enthalten die ja mit ':' ungültige Zeichen!
Noch ein Hinweis: Wenn ich etwas unter Datums-Dateinamen speichere, dann verwende ich für die Darstellung das ISO-Format 'jjjj-mm-tt' - dann kann ich die Dateinamen ordentlich sortieren und erhalte nicht erst alle 1. Januar, dann alle 1. Februar etc.!
Gruß
Dietmar Brüggendiek
|
|
gone 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mo 18.10.04 22:20
@ Brueggendiek:
Vielen Dank für deine ausführliche Antwort.
Ich lasse jetzt beim Start des Programmes den Pfad zum Programm in einer Variablen speichern und das funktioniert auch überall.
Das Programm wird nur von mir selber eingesetzt und ich möchte gerne alles beisammen haben, also lasse ich die Dateien im Programmverzeichnis.
Sollte ich mal ein öffentliches Programm schreiben, werde ich mich aber daran halten und es im Userverzeichnis ablegen!
@ all:
Ich hab schon nach einem Erledigtknopf gesucht, ihn aber bis eben nicht gefunden. In anderen Foren ist er immer am Ende unten links..
Ich werde natürlich gleich draufdrücken!
|
|
|