Datei von Dir A nach Dir B kopieren
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Datei von Dir A nach Dir B kopieren
Hallo,
ich habe eine Vorlagedatei als Basis z.B. vorlage.db3
Nun möchte ich z.B. eine Kopie dieser vorlage.db3 als NewLog.db3 abspeichern.
Mit welcher Komponente kann man eine Datei kopieren ?
Das abspeichern sollte dann mit einem SaveDialog funktionieren ?
Gruß
Frank
ich habe eine Vorlagedatei als Basis z.B. vorlage.db3
Nun möchte ich z.B. eine Kopie dieser vorlage.db3 als NewLog.db3 abspeichern.
Mit welcher Komponente kann man eine Datei kopieren ?
Das abspeichern sollte dann mit einem SaveDialog funktionieren ?
Gruß
Frank
Re: Datei von Dir A nach Dir B kopieren
Eine Komponente braucht man dazu nicht.
http://wiki.lazarus.freepascal.org/CopyFile
http://wiki.lazarus.freepascal.org/CopyFile
Code: Alles auswählen
If SaveDialog1.Execute then CopyFile(QuellDateiName,SaveDialog1.FileName);
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Datei von Dir A nach Dir B kopieren
... Danke theo
habe folgendes versucht
funktioniert aber nicht
Ich möchte keinen absoluten Bezug wie C:\... angeben - unter dem Projektverzeichnis sind Quell- und Zielverzeichnis gelegen
Das ganze soll unter Win und Linux laufen.
habe folgendes versucht
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFile('\Master\adlogclear.db3','\Datenbank\adlogclear.db3');
end;

Ich möchte keinen absoluten Bezug wie C:\... angeben - unter dem Projektverzeichnis sind Quell- und Zielverzeichnis gelegen
Das ganze soll unter Win und Linux laufen.
- gladio
- Beiträge: 223
- Registriert: Sa 21. Jun 2014, 06:15
- OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Datei von Dir A nach Dir B kopieren
So wird das wohl nichts werden. Unter Linux sind die Verzeichnistrenner(?) in der pfadangabe doch '/' oder?
Ist es nicht besser der Copy-Funktion Quelle und Ziel als String zu übergeben, die vorher natürlich entsprechen ausgelesen werden müssen
etwa so
Ist es nicht besser der Copy-Funktion Quelle und Ziel als String zu übergeben, die vorher natürlich entsprechen ausgelesen werden müssen
etwa so
Code: Alles auswählen
var Quelle, Ziel : String;
Quelle := (ExtractFilePath(Application.ExeName)+'DeineQuellDatei');
Ziel := (ExtractFilePath(Application.ExeName)+'DeinZiel');
CopyFile(Quelle,Ziel);
Re: Datei von Dir A nach Dir B kopieren
Was funktioniert denn da nicht? Ein paar mehr Informationen wären schon hilfreich...
Vielleicht existiert das Zielverzeichnis nicht? Dann gibst du als zusätzlichen Parameter [cffCreateDestDirectory] an, falls die Zieldatei schon existiert und überschrieben werden soll auch [cffOverwiteFile].
Du kannst bei vielen Lazarus/FPC-Funktionen unter Windows auch die Linux-Slashes im Dateinamen verwenden, so auch bei CopyFile (gerade getestet). Obwohl... Ich habe Win10, und da gibt es ja diese eingebaute Linux-Umgebung... Evtl. musst du vor CopyFile noch EnforcePathDelimis(pfad) aufrufen (in LazFileUtils), das den richtigen Slash einsetzt. Ist auf jeden Fall nicht falsch...
Zum relativen Verzeichnis: Zur Laufzeit ist das Projektverzeichnis egal, sondern der Bezugspunkt ist das Exe-Verzeichnis. Den Pfad zum Exe-Verzeichnis erhältst du über Application.Location.
Vielleicht existiert das Zielverzeichnis nicht? Dann gibst du als zusätzlichen Parameter [cffCreateDestDirectory] an, falls die Zieldatei schon existiert und überschrieben werden soll auch [cffOverwiteFile].
Du kannst bei vielen Lazarus/FPC-Funktionen unter Windows auch die Linux-Slashes im Dateinamen verwenden, so auch bei CopyFile (gerade getestet). Obwohl... Ich habe Win10, und da gibt es ja diese eingebaute Linux-Umgebung... Evtl. musst du vor CopyFile noch EnforcePathDelimis(pfad) aufrufen (in LazFileUtils), das den richtigen Slash einsetzt. Ist auf jeden Fall nicht falsch...
Zum relativen Verzeichnis: Zur Laufzeit ist das Projektverzeichnis egal, sondern der Bezugspunkt ist das Exe-Verzeichnis. Den Pfad zum Exe-Verzeichnis erhältst du über Application.Location.
Code: Alles auswählen
var
src, dest: String;
begin
src := AppendPathDelim(Application.Location) + 'Master\adlogclear.db3';
dest := AppendPathDelim(Application.Location) + 'Datenbank\adlogclear.db3';
EnforcePathDelims(src);
EnforcePathDelims(dest);
if CopyFile(src, dest, [cffCreateDestDirectory, cffOverwriteFile]) then
ShowMessage('Datei wurde erfolgreich kopiert') else
ShowMessage('Kopieren fehlgeschlagen');
end;
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Datei von Dir A nach Dir B kopieren
... vielen Dank
Problem ist gelößt
Problem ist gelößt

-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Datei von Dir A nach Dir B kopieren
... doch noch Problem
EnforcePathDelims ist unbekannt und LazFileUtils ist eingebunden
EnforcePathDelims ist unbekannt und LazFileUtils ist eingebunden

Re: Datei von Dir A nach Dir B kopieren
Oh - ein Tippfehler: Es heißt "ForcePathDelims", und das gibt es auch in Laz 1.6.x und wahrscheinlich früher.
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Datei von Dir A nach Dir B kopieren
... so nun funktioniert es unter Win und Debian.
Er sagt mir aber noch dass AppendPathDelim veraltet ist - gibt es da was neues ?
Er sagt mir aber noch dass AppendPathDelim veraltet ist - gibt es da was neues ?
-
- Beiträge: 2119
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Datei von Dir A nach Dir B kopieren
Du nur am Rand, wenn das working directory gleich dem executeable path ist, kannst du auch einfach sowas verwenden:
Moderne Windows versionen kommen sowohl mit /als pfadtrenner als auch mit . Bzw .. als relative pfadangaben klar. Und sofern deine Software nicht für 95 ist sollte es funktionieren
Code: Alles auswählen
CopyFile('./Master/adlogclear.db3','./Datenbank/adlogclear.db3');
Re: Datei von Dir A nach Dir B kopieren
Ich muss raten, weil ich dir von dir verwendete Lazarus-Version nicht kenne. Zwischen den Units FileUtils und LazFileUtils gab es einige Transfers. Am besten nimmst du beide in "uses" auf. Ansonsten gibt es noch IncludeTrailingPathDelimiter in SysUtils mit derselben Function.