Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi CopyFile() plattformunabhängig (https://www.delphipraxis.net/133081-copyfile-plattformunabhaengig.html)

blackdrake 25. Apr 2009 00:43


CopyFile() plattformunabhängig
 
Hallo.

Ich möchte meine Anwendung plattformunabhängig gestalten. Ich konnte bis jetzt fast alle Referenzen zu der Unit Windows.pas durch Äquivalente der RTL ersetzen. Doch bei CopyFile() hakt es. Ein Blick in die Hilfe brachte das Ergebnis, dass es in der RTL (zumindestens bei D7) keine Funktion gibt, sondern nur die WinAPI.

Da zum Einen bestimmt viele Leute dieses Problem haben und zum Anderen CopyFile() eine sehr wichtige Funktion ist, dachte ich mir, es müsste sicherlich einen einfachen MyCopyFile() Quellcode geben. Doch ich habe nichts gefunden!

Kennt jemand einen guten Code bzw. kann mir bei der Entwicklung einer äquivalenten Funktion helfen? Wie ist es in FreePascal, Kylix oder Lazarus, die ja allesamt auch für Linux compilieren können, gelöst worden? Ist dort eine derartige Funktion vorhanden oder hoffen sie, dass WinE o.ä. eine Art borland.Windows.so bereitstellt?

Teil 1 wäre das binäre Kopieren der Datei. Ich denke, das lässt sich mittels AssignFile() lösen - bisher habe ich das aber nur mit Textdateien gekannt. Wie ich sicher Binär kopiere, weiß ich noch nicht genau.

Der schwierigere Teil 2 wäre dann das Kopieren der Attribute (außer der Sicherheitsattribute) sowie der Zeitstempel. Schließlich soll die Kopie auch wirklich eine Kopie sein. Nur wie erledigt man das zuverlässig und auch noch plattformunabhängig?

Das Wichtigste ist, dass die Funktion möglichst genau so arbeitet wie das WinAPI-Pendant (ansonsten könnten Aufrufe mit z.B. falschen Erfolgswert schlimmstenfalls zum Datenverlust führen, wenn die Quelldatei dann z.B. aufgrund des laufwerksübergreifenden Verschiebens gelöscht wird). Dann könnte man auch eine Wrapper-Funktion mit Compilerflags realisieren.

Gruß
blackdrake

jaenicke 25. Apr 2009 00:59

Re: CopyFile() plattformunabhängig
 
Vielleicht hilft dir ja dies für Lazarus:
http://www.mail-archive.com/lazarus@.../msg20694.html

Zitat:

Zitat von blackdrake
Wie ist es in FreePascal, Kylix oder Lazarus, die ja allesamt auch für Linux compilieren können, gelöst worden?

Wie meinst du das? Womit arbeitest du denn sonst, wenn du plattformunabhängig sein möchtest?

blackdrake 26. Apr 2009 11:50

Re: CopyFile() plattformunabhängig
 
Zitat:

Zitat von jaenicke
Vielleicht hilft dir ja dies für Lazarus:
http://www.mail-archive.com/lazarus@.../msg20694.html

OK, werde ich mir mal anschauen, in wie weit das alles abdeckt und von der Win32API unabhängig ist (teste ich später in Delphi).

Zitat:

Zitat von jaenicke
Wie meinst du das? Womit arbeitest du denn sonst, wenn du plattformunabhängig sein möchtest?

Das meinte ich in sofern, dass ich frage, wie denn die Lazarus-RTL aussieht. Da sie ja OS-unabhängig ist, sollte ja keine Win32API aufgerufen werden. Deswegen frage ich mich, ob es im Lazarus-Quelltext eine CopyFile() Methode gibt, die OS-unabhängig ist, und die man evtl. verwenden könnte.
Bei der Kylix-RTL habe ich von Foren entnommen, dass es dort beispielsweise gar keine CopyFile() Methode gab.

Luckie 26. Apr 2009 13:32

Re: CopyFile() plattformunabhängig
 
Zitat:

Zitat von blackdrake
Da sie ja OS-unabhängig ist, sollte ja keine Win32API aufgerufen werden.

Das ist unmöglich. Unter Windows müssen WinAPI Aufrufe stattfinden, da die WinAPI die Schnittstelle zum Betriebssystem ist. Und gerade die Dateiverwaltung ist Aufgabe des Betriebssystems. Es dürfte daher nicht möglich sein ohne Betriebssystemfunktionen eine Datei zu kopieren.

omata 26. Apr 2009 13:37

Re: CopyFile() plattformunabhängig
 
Zitat:

Zitat von blackdrake
...Wie ist es in FreePascal, Kylix oder Lazarus, die ja allesamt auch für Linux compilieren können, gelöst worden?...

Installiere dir doch Lazarus, dann kannst du dir das ansehen.

DeddyH 26. Apr 2009 13:44

Re: CopyFile() plattformunabhängig
 
Man könnte das schön altmodisch wie seinerzeit in TP mit BlockRead/BlockWrite lösen, dazu braucht man dann keine spezifischen API-Funktionen.

[edit] Alternativ sollte das auch mit Streams funktionieren. [/edit]

Luckie 26. Apr 2009 13:49

Re: CopyFile() plattformunabhängig
 
Zitat:

Zitat von DeddyH
Man könnte das schön altmodisch wie seinerzeit in TP mit BlockRead/BlockWrite lösen, dazu braucht man dann keine spezifischen API-Funktionen.

Sicher? Und wie sagt BlockRead / BlockWrite Windows, dass ein Block aus einer Datei gelesen und geschrieben werden soll? Unter Windows landest du da wieder bei WinAPI Aufrufen. Du kannst die WinAPI nicht umgehen.

Apollonius 26. Apr 2009 13:49

Re: CopyFile() plattformunabhängig
 
Ich vermute eher, dass einfach die Stellen mit dem Zugriff auf betriebssystemspezifische Funktionen geifdeft ( :angel: ) sind. In der Delphi-RTL wird es so gemacht, auch wenn z.Z. nur Windows unterstützt wird.

Luckie 26. Apr 2009 13:52

Re: CopyFile() plattformunabhängig
 
Richtig. Plattformunabhängig heißt nur, dass man plattformunabhängigen Code schreiben kann. Das Programm muss aber immer noch für die entsprechende Plattform kompiliert werden. Das ist bei plattformunabhängigen C Programmen genauso.

DeddyH 26. Apr 2009 13:59

Re: CopyFile() plattformunabhängig
 
Ich denke, darum geht es die ganze Zeit. Dass ein Unix-Kompilat unter Windows nicht läuft, ist ja wohl klar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz