![]() |
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 |
Re: CopyFile() plattformunabhängig
Vielleicht hilft dir ja dies für Lazarus:
![]() Zitat:
|
Re: CopyFile() plattformunabhängig
Zitat:
Zitat:
Bei der Kylix-RTL habe ich von Foren entnommen, dass es dort beispielsweise gar keine CopyFile() Methode gab. |
Re: CopyFile() plattformunabhängig
Zitat:
|
Re: CopyFile() plattformunabhängig
Zitat:
|
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] |
Re: CopyFile() plattformunabhängig
Zitat:
|
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.
|
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.
|
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.
|
Re: CopyFile() plattformunabhängig
Zitat:
Delphi-Quellcode:
Und dass ich einmal mit Linux, einmal mit Windows kompilieren muss, ist mir auch klar. Drücke ich mich so unverständlich aus?
function __copy...;
begin // TODO: Daten kopieren (Pascal) // TODO: Zeitstempel (Linux-spezifisch) kopieren // TODO: Attribute (Linux-spezifisch) kopieren // Genau den Code suche ich!! end; function MyCopyFile... begin {$IFDEF WINDOWS} result := CopyFile...; // WinAPI DLL call {$ELSE} result := __copy...; {$ENDIF} end; |
Re: CopyFile() plattformunabhängig
Ich hab' s verstanden :mrgreen:
|
Re: CopyFile() plattformunabhängig
Zitat:
|
Re: CopyFile() plattformunabhängig
Du darfst eben nicht zu weit voraus denken ;). Dass man irgendwann auf Betriebssystemebene landet, sollte klar sein, aber es ging ja nur um OS-unabhängigen Code ("write once, compile anywhere", das hab ich doch schon irgendwo mal gelesen *g*).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz