AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CopyFile() plattformunabhängig

Offene Frage von "blackdrake"
Ein Thema von blackdrake · begonnen am 25. Apr 2009 · letzter Beitrag vom 26. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2   
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

CopyFile() plattformunabhängig

  Alt 25. Apr 2009, 01:43
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
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.286 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: CopyFile() plattformunabhängig

  Alt 25. Apr 2009, 01:59
Vielleicht hilft dir ja dies für Lazarus:
http://www.mail-archive.com/lazarus@.../msg20694.html

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?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 12:50
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 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.
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 14:32
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 14:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 14:44
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 14:49
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 14:49
Ich vermute eher, dass einfach die Stellen mit dem Zugriff auf betriebssystemspezifische Funktionen geifdeft ( ) sind. In der Delphi-RTL wird es so gemacht, auch wenn z.Z. nur Windows unterstützt wird.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 14:52
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: CopyFile() plattformunabhängig

  Alt 26. Apr 2009, 14:59
Ich denke, darum geht es die ganze Zeit. Dass ein Unix-Kompilat unter Windows nicht läuft, ist ja wohl klar.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.
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