Für meine Anwendung teste ich den längsten verfügbaren Dateipfad, damit er in den Papierkorb verschoben werden kann, und ich bekomme interessante Ergebnisse.
Unter Windows XP beträgt die maximale Größe 259 Zeichen. Dies ist die MAX_PATH Konstante minus 1 .
Aber auf meinem Windows 8.1 Pro scheint diese maximal erlaubte Dateipfadgröße 215 Zeichen zu sein.
Ich bin also neugierig, gibt es dafür offizielle Richtlinien?
BEARBEITEN: OK, da die Poster unten eine API angefordert haben, verwende ich SHFileOperation
mit FO_DELETE
und FOF_ALLOWUNDO
, um die Datei eines Benutzers in den Papierkorb zu legen. Da Windows Explorer die gleiche genaue API für seine Löschoperation verwendet, ist es einfach, sie zu testen, indem Sie einen langen Pfad innerhalb von Windows Explorer erstellen und dann versuchen, ihn zu löschen. In meinen Experimenten kann ich Folgendes sehen:
Windows XP , wenn die Gesamtpfadlänge 259 Zeichen beträgt (bei einigen Editionen kann es 257 sein?), wird die Datei / der Ordner in den Papierkorb gelegt. Ansonsten bietet Windows Explorer nur eine Option, um es dauerhaft zu löschen.
Windows Vista em>, dieses Limit beträgt einschließlich 217 Zeichen.
Windows 7 und 8 , es sind 215 Zeichen inklusive.
Es scheint also so, als ob dieses maximale Limit schrumpft ... Also war ich nur neugierig, ob das irgendwo in MSDN dokumentiert ist?
Papierkorb Interna:
Windows XP
Jedes Laufwerk hat sein eigenes Laufwerk: \ RECYCLER \% USER_SID% Verzeichnis. Dieses Verzeichnis enthält alle gelöschten Dateien, aber Dateien haben Namen wie DcN.ext wobei D fester Bestandteil des Namens ist, c Laufwerksbuchstabe
INFO2-Datei beginnt mit dem Header. Kopfstruktur:
%Vor%Datensätze werden nacheinander unmittelbar nach dem Header am Ende der INFO2-Datei gespeichert. Datensatzstruktur:
%Vor%Windows Vista und höher
Jedes Laufwerk hat sein eigenes Laufwerk: \ $ Recycle.Bin \% USER_SID% -Verzeichnis. Dieses Verzeichnis enthält alle gelöschten Dateien, aber jetzt gibt es keine Datenbankdatei mehr. Jede gelöschte Datei ist mit 2 Dateien in RB verknüpft.
Die erste Datei hat einen Namen wie $ INNNNNN.ext wobei $ I fester Bestandteil des Namens ist, NNNNNN besteht aus 6 zufälligen Buchstaben oder Zahlen und ext ist die Erweiterung der Originaldatei.
$ I Dateistruktur:
%Vor%Die zweite Datei hat einen Namen wie $ RNNNNNN.ext wobei $ R fester Bestandteil des Namens ist, NNNNNN ist der gleiche wie in $ Ich datei und ext ist die Erweiterung der Originaldatei. $ R-Datei ist gelöschte Datei selbst.
Wie Sie in allen Fällen sehen, speichert Windows den Dateinamen im Array mit der Größe von MAX_PATH-Zeichen. Daher ist die maximale Länge des Dateinamens MAX_PATH - 1 Zeichen .
Einfache Antwort. Der Papierkorb ist ein (gut) versteckter Ordner auf der Festplatte. Alle darin enthaltenen Dateien behalten ihre ursprünglichen Namen sowie die zusätzliche Länge für den Namen des Papierkorbordners.
In Windows XP sah der Pfad folgendermaßen aus:
C: \ RECYCLER \ S-1-5-21-1089551744-1120685985-1162132538-1003 \
Ich bin sicher, dass es in späteren Versionen ähnlich ist, aber vielleicht länger wird. Dein Dateiname muss am Ende davon weitergehen und immer noch innerhalb des 260-Limits bleiben.
Wie finden Sie diesen Namen für ein bestimmtes System? Versuchen Sie GetFinalPathnameByHandle oder dieses Blog.
Weitere nützliche Orte zum Ausprobieren.
IKnownFolder: Ссылка
SHGetKnownFolderPath: Ссылка
SHGetFolderPath mit CSIDL: Ссылка
Tags und Links windows winapi windows-explorer windows-shell