AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi NTFS - Dateiberechtigungen übernehmen
Thema durchsuchen
Ansicht
Themen-Optionen

NTFS - Dateiberechtigungen übernehmen

Ein Thema von Pentium 80486 · begonnen am 29. Mai 2012 · letzter Beitrag vom 29. Mai 2012
Antwort Antwort
Pentium 80486
(Gast)

n/a Beiträge
 
#1

NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 19:47
Hallo,

derzeit verwende ich, da es die für meine Zwecke schnellste Methode ist, SHFileOpStruc, um Dateien zu kopieren.
Leider gehen dabei die Werte der Sicherheitsattribute verloren.

Der Code ist kein Geheimnis und Standard:
Delphi-Quellcode:
function copyFileEx(const aSourceFile, aDestFile: string): Boolean;
var
 fos: TSHFileOpStruct;
begin
 ZeroMemory(@fos, SizeOf(fos));

 with fos do
  begin
   wFunc := FO_COPY;
   fFlags := FOF_NO_UI;
   pFrom := PChar(aSourceFile + #0);
   pTo := PChar(aDestFile)
  end;

 Result := (0 = SHFileOperation(fos));
end;

Wie genau muss ich eine Datei kopieren, damit auch die Sicherheitsattribute und dessen eingestellten Werte übertragen werden?

Geändert von Pentium 80486 (29. Mai 2012 um 19:58 Uhr)
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

AW: NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 19:59
Die sollten normalerweise mitkommen.

Bei TSHFileOPStruct gibt es nur ein Flag um das abzuschalten:

FOF_NOCOPYSECURITYATTRIBS
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 20:02
Die sollten normalerweise mitkommen.
Nein. Normalerweise werden die Rechte vom Zielverzeichnis übernommen, weil standardmäßig die Vererbung aktiviert ist.

Ich bin mir nicht ganz sicher, aber ich glaube mich zu erinnern, dass Programme wie Total Commander die Berechtigungen von der Quelle auslesen und auf das Ziel übertragen.

MfG Dalai
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#4

AW: NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 20:15
Die sollten normalerweise mitkommen.
Nein. Normalerweise werden die Rechte vom Zielverzeichnis übernommen, weil standardmäßig die Vererbung aktiviert ist.
Und welchen Sinn ergibt dann das Flag, welches man in der Beschreibung findet?
Lars
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#5

AW: NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 20:28
Falls das Flag nichts das gewünschte Ergebnis liefert:


Eventuell manuell über MSDN-Library durchsuchenCreateFile kopieren.
Neue Datei erstellen, das Original als Template verwenden und dann den Inhalt noch rüberschaufeln.

Was dabei nun genau alles kopiert wird, weiß ich aber nicht.

Ansonsten gibt's in den Jedi die Abteilung der Security-API, also Rechte auslesen und nach dem Kopieren entsprechend setzen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Pentium 80486
(Gast)

n/a Beiträge
 
#6

AW: NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 20:45
Zitat:
Neue Datei erstellen, das Original als Template verwenden und dann den Inhalt noch rüberschaufeln.
Daran hatte ich auch schon gedacht und es durchgetestet.

Das Kopieren einer 10MB Datei dauert bei mir mit TSHFileOPStruct etwa 10 Millisekunden. Mit CreateFile und eigenem Buffer usw. 350 Millisekunden.
Ein angepasster Buffer senkt die Kopierzeit auf akzeptable Werte. Aber ich bleibe lieber bei TSHFileOPStruct.

Dann werde ich die Sicherheitseinstellungen für jede Datei wohl zwischenspeichern müssen und auf die Zieldatei übertragen.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#7

AW: NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 21:01
Die sollten normalerweise mitkommen.
Nein. Normalerweise werden die Rechte vom Zielverzeichnis übernommen, weil standardmäßig die Vererbung aktiviert ist.
Und welchen Sinn ergibt dann das Flag, welches man in der Beschreibung findet?
Das weiß ich nicht. Ich habe nur meine bisherigen Erfahrungen mit diversen Programmen (Explorer, Total Commander (der übrigens auch CopyFileEx benutzt), cwrsync, der CMD usw) und deren Kopiermethoden gemacht und diese Erfahrung kundgetan. Einzige Ausnahme, die ich bisher feststellte: ein move auf einer CMD nimmt die Rechte der Quelle mit.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: NTFS - Dateiberechtigungen übernehmen

  Alt 29. Mai 2012, 21:11
Und welchen Sinn ergibt dann das Flag, welches man in der Beschreibung findet?
http://blogs.msdn.com/b/oldnewthing/.../10076226.aspx
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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:24 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