Datei von Dir A nach Dir B kopieren

Für Fragen von Einsteigern und Programmieranfängern...

Datei von Dir A nach Dir B kopieren

Beitragvon DL3AD » 2. Jul 2017, 10:05 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
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon theo » 2. Jul 2017, 10:52 Re: Datei von Dir A nach Dir B kopieren

Eine Komponente braucht man dazu nicht.

http://wiki.lazarus.freepascal.org/CopyFile

Code: Alles auswählen
If SaveDialog1.Execute then CopyFile(QuellDateiName,SaveDialog1.FileName);     
theo
 
Beiträge: 8058
Registriert: 11. Sep 2006, 18:01

Beitragvon DL3AD » 2. Jul 2017, 11:11 Re: Datei von Dir A nach Dir B kopieren

... Danke theo

habe folgendes versucht
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyFile('\Master\adlogclear.db3','\Datenbank\adlogclear.db3');
 end;       

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.
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon gladio » 2. Jul 2017, 11:26 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
Code: Alles auswählen
 
var Quelle, Ziel : String;
 
Quelle := (ExtractFilePath(Application.ExeName)+'DeineQuellDatei');
Ziel := (ExtractFilePath(Application.ExeName)+'DeinZiel');
CopyFile(Quelle,Ziel);
 
gladio
 
Beiträge: 95
Registriert: 21. Jun 2014, 05:15
Wohnort: Insel Rügen
OS, Lazarus, FPC: Win7/10-32/64 - Laz 1.8 Standard-Edition | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon wp_xyz » 2. Jul 2017, 11:31 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.

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;
wp_xyz
 
Beiträge: 2647
Registriert: 8. Apr 2011, 08:01

Beitragvon DL3AD » 2. Jul 2017, 12:08 Re: Datei von Dir A nach Dir B kopieren

... vielen Dank
Problem ist gelößt :)
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon DL3AD » 2. Jul 2017, 12:41 Re: Datei von Dir A nach Dir B kopieren

... doch noch Problem

EnforcePathDelims ist unbekannt und LazFileUtils ist eingebunden :shock:
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon wp_xyz » 2. Jul 2017, 13:10 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.
wp_xyz
 
Beiträge: 2647
Registriert: 8. Apr 2011, 08:01

Beitragvon DL3AD » 2. Jul 2017, 13:54 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 ?
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon Warf » 2. Jul 2017, 14:24 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:
Code: Alles auswählen
CopyFile('./Master/adlogclear.db3','./Datenbank/adlogclear.db3');


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
Warf
 
Beiträge: 984
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon wp_xyz » 2. Jul 2017, 14:28 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.
wp_xyz
 
Beiträge: 2647
Registriert: 8. Apr 2011, 08:01

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste

porpoises-institution
accuracy-worried