Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Löschen einer Datei in den Papierkorb mit UNC-Pfad schlägt fehl (https://www.delphipraxis.net/212337-loeschen-einer-datei-den-papierkorb-mit-unc-pfad-schlaegt-fehl.html)

DieDolly 27. Jan 2023 06:39


Löschen einer Datei in den Papierkorb mit UNC-Pfad schlägt fehl
 
Mir ist heute erst nach Jahren aufgefallen, dass eine Datei nicht gelöscht wird, wenn ein Pfad übergeben wird der so aussieht. Das Laufwerk ist ein Netzlaufwerk

Funktioniert >
Delphi-Quellcode:
\\nas\d1\Sub4\File1.txt


Funktioniert nicht >
Delphi-Quellcode:
\\?\UNC\nas\d1\Sub4\File1.txt


Braucht man dieses \\?\UNC Präfix heute überhaupt noch für UNC-Pfade? Oder anders gefragt: ist das Präfix was ich da im zweiten Beispiel habe überhaupt richtig? Das ist ja der TPathPrefixType "pptExtendedUNC".

Ich "lösche" solche Dateien, wenns kein Netzlaufwerk ist, in den Papierkorb mit dieser Funktion.

\\: funktioniert
pptExtended, \\?\: funktioniert nicht
pptExtendedUNC, \\?\UNC\: funktioniert nicht

Delphi-Quellcode:
function RecycleFile(sTmp: string): Boolean;
var
 SHFileOpStruct: TSHFileOpStruct;
begin
 SHFileOpStruct.Wnd := 0;
 SHFileOpStruct.wFunc := FO_DELETE;
 SHFileOpStruct.pFrom := PChar(sTmp + #0 + #0);
 SHFileOpStruct.pTo := nil;
 SHFileOpStruct.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT or FOF_NOERRORUI;
 SHFileOpStruct.hNameMappings := nil;
 SHFileOpStruct.lpszProgressTitle := nil;

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

bnreimer42 27. Jan 2023 07:01

AW: Löschen einer Datei mit UNC-Pfad schlägt fehl
 
Was gibt denn Result zurück, wenn eine Datei nicht gelöscht werden konnte?

bnreimer42 27. Jan 2023 07:04

AW: Löschen einer Datei mit UNC-Pfad schlägt fehl
 
Doe Doku von MS sagt unter https://learn.microsoft.com/en-us/wi...hfileopstructa

Zitat:

SHFileOperation fails on any path prefixed with "\?".

DieDolly 27. Jan 2023 10:26

AW: Löschen einer Datei mit UNC-Pfad schlägt fehl
 
SHFileOperation geht nicht ohne UNC-Prefixe, das ist schlecht.
Ich habe bisher noch keine andere Funktion gefunden, die in den Papierkorb löschen kann, gibt es das ohne SHFileOperation überhaupt?

hoika 27. Jan 2023 10:40

AW: Löschen einer Datei mit UNC-Pfad schlägt fehl
 
Hallo,
Papierkorb leeren

https://learn.microsoft.com/en-us/wi...ptyrecyclebina

Oder meintet Du das Löschen "im" Papierkorb.

DieDolly 27. Jan 2023 10:46

AW: Löschen einer Datei mit UNC-Pfad schlägt fehl
 
Ich glaube ich habe mich missverständlich ausgedrückt. Nicht den Papierkorb löschen sondern in den Papierkorb löschen.

hoika 27. Jan 2023 10:59

AW: Löschen einer Datei in den Papierkorb mit UNC-Pfad schlägt fehl
 
Hallo,
"in" oder "im"

"in": Löschen und Verschieben in den Papierkorb
"im": Löschen einer Datei im Papierkorb (also endgültig löschen)

?

DieDolly 27. Jan 2023 11:09

AW: Löschen einer Datei in den Papierkorb mit UNC-Pfad schlägt fehl
 
In, nicht im.

Die Datei ist in irgendeinem Verzeichnis und ich möchte die in den Papierkorb löschen.
Funktioniert ja auch, aber leider nicht mit UNC-Pfaden vorne dran wiue \\?\ und \\?\UNC.

Ich glaube UNC-Pfade brauchte man früher für Lange Pfade oder sowas. Deswegen habe ich alles damals so umgestellt, dass intern nur mit UNC-Pfaden gewerkelt wird.
Probleme gibt es, bis auf dass ich nicht in den Papierkorb löschen kann, keine.

Dalai 27. Jan 2023 14:37

AW: Löschen einer Datei in den Papierkorb mit UNC-Pfad schlägt fehl
 
Es gibt nicht den einen Papierkorb. Jedes Volume hat seinen eigenen Papierkorb. Eigentlich hat sogar jeder Nutzer seinen eigenen Papierkorb auf jedem einzelnen Volume - siehe versteckte Verzeichnisse $Recycle.bin und Recycler auf einem beliebigen Volume. Dateien, die ein Nutzer in den Papierkorb schiebt, kann kein anderer Nutzer sehen (oder endgültig löschen). Aber das führt wohl etwas zu weit.

Dateien, die in den Papierkorb verschoben werden, landen im Papierkorb des jeweiligen Volumes. Bei UNC-Pfaden kann sowas nur dann funktionieren, wenn der Server irgendwie mitspielt und das eigentliche Verschieben in den Papierkorb übernimmt. Ich meine mich zu erinnern, dass es auch bei SMB-Servern Papierkörbe geben kann, sofern man es explizit einschaltet. Wo und wie das geht, weiß ich aber nicht.

Grüße
Dalai

DieDolly 27. Jan 2023 17:00

AW: Löschen einer Datei in den Papierkorb mit UNC-Pfad schlägt fehl
 
Zitat:

Bei UNC-Pfaden kann sowas nur dann funktionieren, wenn der Server irgendwie mitspielt und das eigentliche Verschieben in den Papierkorb übernimmt.
Ich meine ganz allgemein UNC-Pfade. Das muss kein Server sein.

Das kann auch
Delphi-Quellcode:
\\?\D:\Test\test.txt
sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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