Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Exaktes Filecopy für Windows und Android (https://www.delphipraxis.net/198794-exaktes-filecopy-fuer-windows-und-android.html)

Uwe Raabe 30. Nov 2018 13:01

AW: Exaktes Filecopy für Windows und Android
 
Zitat:

Zitat von KodeZwerg (Beitrag 1419778)
Die zweiten Codeteile von mir nutzen nur IOUtils. Klappt da was nicht auf non-Windows?

Die Routinen aus IOUtils sollten auf allen Plattformen funktionieren.

KodeZwerg 30. Nov 2018 13:12

AW: Exaktes Filecopy für Windows und Android
 
Genau diesen Eindruck hatte ich auch, aber ich kann es halt nicht nachmachen.

Danke für Aufklärung!


Ps: Mir fehlen da auch Grundlagenkenntnisse für non-Windows und was da für Attribute/Datumstempel tatsächlich existieren/berücksichtigt werden müssen, an TE bitte vorher informieren, meine Basics zeigen nur Windows Möglichkeiten um was so genau wie möglich dem original nachzuempfinden.

PPs: Dieses Thema gehört nicht nach WinApi :-]

skoschke 30. Nov 2018 13:27

AW: Exaktes Filecopy für Windows und Android
 
Inzwischen war Post #5 entstanden, klingt hervorragend!

Erst kopieren und dann per

Delphi-Quellcode:
...
  sor := 'c:\tmp\Neu.txt';
  des := 'c:\tmp\Neu_2.txt';
  TFile.Copy(sor, des, true);
  dt := TFile.GetCreationTime(sor);
  TFile.SetCreationTime(des, dt);
  dt := TFile.GetCreationTime(des);
  TFile.SetCreationTimeUtc(des, dt);
  dt := TFile.GetLastAccessTime(sor);
  TFile.SetLastAccessTime(des, dt);
  dt := TFile.GetLastWriteTime(sor);
  TFile.SetLastAccessTimeUtc(des, dt);
  dt :=TFile.GetLastWriteTime(sor);
  TFile.SetLastWriteTime(des,dt);
  dt:=TFile.GetLastWriteTimeUtc(sor);
  tfile.SetLastWriteTimeUtc(des,dt);
die gewünschten Angaben anpassen, würde auch unter Android compilierbar sein, aber:

Ich erstelle die Datei Neu.txt im Explorer, deren Anderungsdatum ist heute 14:22 (stimmt), das Erstelldatum aber heute 14:14 ????
Die kopierte Datei hat das Änderungsdatum wie die Originaldatei, als Erstelldatum aber 15:14 (in der Zukunft!)

Ich krieg die Krise!
Warum das denn nun?

Ciao
Stefan

skoschke 30. Nov 2018 13:32

AW: Exaktes Filecopy für Windows und Android
 
Delphi-Quellcode:
  dt := TFile.GetCreationTime(sor);
  TFile.SetCreationTime(des, dt);
  dt := TFile.GetCreationTimeUtc(des);
  TFile.SetCreationTimeUtc(des, dt);

  dt := TFile.GetLastAccessTime(sor);
  TFile.SetLastAccessTime(des, dt);
  dt := TFile.GetLastAccessTimeUtc(sor);
  TFile.SetLastAccessTimeUtc(des, dt);

  dt := TFile.GetLastAccessTime(sor);
  TFile.SetLastAccessTime(des, dt);
  dt := TFile.GetLastAccessTimeUtc(sor);
  TFile.SetLastAccessTimeUtc(des, dt);

  dt :=TFile.GetLastWriteTime(sor);
  TFile.SetLastWriteTime(des,dt);
  dt:=TFile.GetLastWriteTimeUtc(sor);
  tfile.SetLastWriteTimeUtc(des,dt);
im vorigen posting war ein Vertipper per copy/paste, die Datumsangaben sind nun identisch für beide Dateien, unklar ist aber warum die Datei 8 Minuten vor ihrer Erzeugung erstellt wurde!

Ciao
Stefan

DieDolly 30. Nov 2018 13:34

AW: Exaktes Filecopy für Windows und Android
 
Schreib dir am besten einen Wrapper für all das oder so. Auf die Existenz der Quelldatei muss geprüft werden sonst kracht es.

KodeZwerg 30. Nov 2018 13:36

AW: Exaktes Filecopy für Windows und Android
 
Lass mal unter Windows das ganze UTC gedöns raus. Bei mir klappt es.

DP-Maintenance 30. Nov 2018 17:56

Dieses Thema wurde am "30. Nov 2018, 18:56 Uhr" von "Luckie" aus dem Forum "Win32/Win64 API (native code)" in das Forum "Cross-Platform-Entwicklung" verschoben.

CCRDude 30. Nov 2018 18:15

AW: Exaktes Filecopy für Windows und Android
 
Zitat:

Zitat von DieDolly (Beitrag 1419777)
Android ist Linux. Da würde ich mir erst gar keine Mühe für machen. Das ganze Rechtesystem bei Android/Linux ist viel zu kompliziert als dass man da groß Zeit für investieren sollte finde ich.

Ein Besitzer, eine Gruppe. Besitzer, Gruppe und Alle haben Rechte (oder nicht) zu Lesen, Schreiben, Ausführen.

Im Gegensatz dazu besitzt Windows beliebig komplexe ACLs. Jede Datei kann theoretisch dutzende verschiedene Rechte haben, jeweils mit anderen Nutzern oder Gruppen, namentlich oder per Konstante, mit oder ohne Vererbung von übergeordneten Rechte.

Jetzt wundert mich auch nicht mehr, warum Du so gegen Lazarus mobbst ;)
Ich weiß leider nicht, wie das unter Delphi geht, aber unter FreePascal ist das simpel:
https://www.freepascal.org/docs-html...x/fpchown.html
https://www.freepascal.org/docs-html...x/fpchmod.html
Und schon wären die Berechtigungen kopiert. Mit Windows & ACLs dagegen kann man das exakte Kopieren von Rechten nicht einmal nur auf die Datei bezogen definieren (was auch Vorteile hat).

DieDolly 30. Nov 2018 18:16

AW: Exaktes Filecopy für Windows und Android
 
Ne, gegen Lazurus mobbe ich nur, weil die IDE nicht zeitgemäß ist und das schon lange nicht mehr.
Bei Lazurus habe ich den Eindruck Wo viele Hände dran arbeiten, entsteht viel Chaos

Vielleicht gibt es in einem Jahr oder so ja endlich den Android Compiler für die Community-Edition. Das wäre ein Traum.

KodeZwerg 30. Nov 2018 19:19

AW: Exaktes Filecopy für Windows und Android
 
Zitat:

Zitat von skoschke (Beitrag 1419789)
Delphi-Quellcode:

if ( TFile.Exists( Sor ) and TFile.Exists( Des ) ) then
begin
{$IFDEF WINDOWS}
  TFile.SetCreationTime( Des, TFile.GetCreationTime( Sor ) );
  TFile.SetLastAccessTime( Des, TFile.GetLastAccessTime( Sor ) );
  TFile.SetLastWriteTime( Des, TFile.GetLastWriteTime( Sor ) );
{$ELSE WINDOWS}
  TFile.SetCreationTimeUtc( Des, TFile.GetCreationTimeUtc( Sor ) );
  TFile.SetLastAccessTimeUtc( Des, TFile.GetLastAccessTimeUtc( Sor ) );
  TFile.SetLastWriteTimeUtc( Des, TFile.GetLastWriteTimeUtc( Sor ) );
{$ENDIF WINDOWS}
  TFile.SetAttributes( Des, TFile.GetAttributes( Sor ) );
end;

So hier könnte es richtig sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.
Seite 2 von 3     12 3      

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