Autor Beitrag
gone
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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:

ausblenden 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;
                                    //Dateien kopieren
  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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: 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
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 18.10.04 21:30 
Das war es! Vielen Dank euch allen!
Ihr habt mir echt geholfen.

gone
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mo 18.10.04 21:36 
Bitte :)
Und Du kannst den anderen 6490 Usern helfen, in dem Du das kleine grüne Häkchen user defined image rechts oberhalb deines ersten Postings klickst und den Thread so als "erledigt" markierst ;)

raziel

_________________
JSXGraph
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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!