Dateinamen werden im MRT kommentarlos abgeschnitten

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
Franz Müller
Senior Member
Senior Member
Posts: 415
Joined: 2005-05-24, 10:41 UTC
Location: Wien

Dateinamen werden im MRT kommentarlos abgeschnitten

Post by *Franz Müller »

Eben bin ich auf einen etwas lästigen Fehler im Multirenametool gestossen: Dateinamen werden, wenn der Gesamtpfad für die neuen Dateinamen zu lang ist, kommentarlos und ohne Warnung abgeschnitten.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Die maximale Länge für einen Dateinamen beträgt 255 Zeichen!

- Wie lang war der Name in deinem Fall?
- Welche TC Version?

Ich habe grad versucht eine Datei mit dem Namen:

Code: Select all

123456789abcdefghijk123456789abcdefghijk123456789abcdefghijk123456789abcdefghijk.txt
(80+3 Zeichen)
mittels

Code: Select all

[N][N][N][N]
(320 +3 Zeichen)
umzubenennen, und erhalte in TC7.50 RC1 die folgende Fehlermeldung:
---------------------------
Total Commander
---------------------------
Fehler, konnte die fett dargestellten Dateien nicht umbenennen!
---------------------------
OK
---------------------------
Umbenennen in [N][N][N] (240+3 Zeichen) klappt ohne Problem.

Das klappt in TC7.5 auch problemlos, wenn der Gesamtpfad zur Datei länger als 259 Zeichen ist.
Die maximale Pfadlänge (inklusive Name.ext) ist 1022 Zeichen.

Gruß
Holger

Edith hat karlchen Korrekturen eingetragen.
Last edited by HolgerK on 2009-08-16, 10:32 UTC, edited 1 time in total.
User avatar
karlchen
Power Member
Power Member
Posts: 4605
Joined: 2003-02-06, 22:23 UTC
Location: Germany

Post by *karlchen »

Hi.

Maximale Gesamtlänge eines Pfades im Total Commander 7.50 beta, also Laufwerksbuchstabe + Doppelpunkt + \ + Verzeichnis + \ + Verzeichnis + \ ... + \ + Dateiname + Punkt + Erweiterung, 1022 Zeichen.

Maximale Länge jedes Teils zwischen 2 Backslashes bzw. nach dem letzten Backslash: 255 Zeichen (Windows-interne Grenze) Also kann ein Dateiname inklusive Punkt und Erweiterung ohne Pfadangabe nicht länger als 255 Zeichen sein.

Mein bescheidener Wissensstand.

Kleiner Hinweis: Doppelpunkt, Backslash sowie jeder Punkt im Namen zählen mit, also auch der Punkt vor der Dateinamenserweiterung. Das erhöht die von dir, Holger, genannten Dateinamenlängen immer genau um 1.

Grüße,
Karl
--
P.S.:
An Dateinamen, die zusammen mit dem vollständigen Pfad mehr als 255 Zeichen haben, scheitert dann aber so mancher Windows-eigene und Drittanbieter-Editor. :(

Dateien, deren vollständiger Pfad länger also 259 Zeichen ist, kann man nicht mehr in den Windows Papierkorb löschen, egal ob per Explorer oder per Total Commander. :!:

Jetzt muß ich die Testdateien daher mit Shift+F8 entsorgen. :idea:
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

karlchen wrote:Kleiner Hinweis: Doppelpunkt, Backslash sowie jeder Punkt im Namen zählen mit, also auch der Punkt vor der Dateinamenserweiterung. Das erhöht die von dir, Holger, genannten Dateinamenlängen immer genau um 1.
Mein Fehler lag darin, dass ich die 0x0 Terminierung des Strings im Buffer nicht abgezogen habe.

Code: Select all

/*
 * Sizes for buffers used by the _makepath() and _splitpath() functions.
 * note that the sizes include space for 0-terminator
 */
#define _MAX_PATH   260 /* max. length of full pathname */
#define _MAX_DRIVE  3   /* max. length of drive component */
#define _MAX_DIR    256 /* max. length of path component */
#define _MAX_FNAME  256 /* max. length of file name component */
#define _MAX_EXT    256 /* max. length of extension component */
Das sind zwar nicht die Grenzen des NTFS-Filesystems aber eine Limitierung in häufig benutzten C-Runtime Funktionen und Win32 APIs.
Daher stolpern (wie von karlchen bereits genannt) viele Programme über solch lange Pfade.

NTFS selber unterstützt maximal 32767 Zeichen.
Wobei MS explizit warnt bis an die maximale Grenze zu gehen:
The maximum path of 32,767 characters is approximate, because the "\\?" prefix may be expanded to a longer string by the system at run time, and this expansion applies to the total length.
Danke für den Hinweis.

Gruß
Holger
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50754
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Ja, TC 7 hat die Namen bei der Windows-Limite von 259 Zeichen automatisch abgeschnitten. TC 7.5 warnt nun, wenn der Name länger wird, und erlaubt bis zu 1022 Zeichen.
Author of Total Commander
https://www.ghisler.com
Post Reply