Laden...

Ersatz für FileInfo, DirectoryInfo ohne Beschänkung der Pfade auf 260 Zeichen

Erstellt von Briefkasten vor 14 Jahren Letzter Beitrag vor 13 Jahren 4.731 Views
Briefkasten Themenstarter:in
446 Beiträge seit 2004
vor 14 Jahren
Ersatz für FileInfo, DirectoryInfo ohne Beschänkung der Pfade auf 260 Zeichen

Hallo,

.NET bringt von Haus aus die Klassen FileInfo, DirectoryInfo etc...

Allerdings erhalte ich des öfteren die Path to Long Exception. Deshalb kopiere ich Dateien nur noch über die WinAPI. Nun stehe ich allerdings vor dem Problem, dass ich die FileInfo Kasse nicht mehr verwenden kann, da die intern auch eine Path TO Long Exception erhält.

Ich suche eine Klasse mit der ich alle Operationen, Funktionen habe wie mit FileInfo, DirectoryInfo etc... die aber direkt auf die WINAPI zugreift UND die Path beschränkung von 260 Zeichen aufhebt. Kennt jemand eine solche Klasse?

lg

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

X
1.177 Beiträge seit 2006
vor 14 Jahren

huhu,

eine fertige Klasse kenne ich da leider nicht, aber ein paar Infos hätte ich noch anzubieten:

Durch das Prefix \?\ wird der Winapi gesagt, dass es gerne längere Pfade verwenden darf (=> .net meldet allerdings ein illegales Zeichen im Pfad, das fällt also auch aus)
Das Prefix "\." wird von .net nicht unterstützt (=> das gibt tatsächlich eine NotSupportedException)

Einen Pfad kann man mit dem guten alten
c:>Subst z:\ c:\MeinLangerPfad
mappen, dann darf man mit .net wieder 260 Zeichen verwenden (=> Allerdings weigert sich mein Windows-Explorer solche Pfade anzuzeigen)

Alternativ kannst du einen Unter-Ordner freigeben und über das Netzwerk arbeiten. Da ist dann die Begrenzung auch nach hinten geschoben.

Hier steht noch mehr zu dem Thema:
Naming Files, Paths, and Namespaces

😃

Xynratron

der seinen Testordner mit >500 Zeichen jetzt nicht mehr löschen kann^^

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

X
1.177 Beiträge seit 2006
vor 14 Jahren

Mir fällt noch ein: Vermeide so lange Pfade. Zwar ist es z.B: über eine Freigabe möglich, dass User über das Netzwerk längere Pfade erzeugen, diese können dann aber nicht mehr unbedingt gebackuped werden. Hatte so nen Fall mal vor Jahren.

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

X
1.177 Beiträge seit 2006
vor 14 Jahren

und weil es mir dann doch keine Ruhe gelassen hat:

.Net benutzt folgende Version:

[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
internal static extern bool CreateDirectory(string path, SECURITY_ATTRIBUTES lpSecurityAttributes);

welche eindeutig das Limit von 248 Zeichen hat. Warum wird nicht CreateDirectoryW() verwendet?

Noch ein Schmankerl:

if (str3.Length > 0xf8)
{
  throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}

Wunderschön schon im Framework verhindern dass das Betriebssystem längere Pfade unterstützen könnte... Naja, alter Schamott wird eben gerne mit rumgeschleppt.

Wenn du eine Komponente/Bibliothek hast, die die Unicode-Funktionen benutzt, sag bescheid. Würde mich auch interessieren.

😃

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

F
10.010 Beiträge seit 2004
vor 14 Jahren

Auf Delimon.be hatte sich mal einer die Mühe gemacht, und die ganzen Routinen per
Invoke in eine Sytem.IO compatible Lib zu packen.

Leider ist die webseite down.
Deshalb hänge ich die Lib mal hier an

Briefkasten Themenstarter:in
446 Beiträge seit 2004
vor 14 Jahren

Super danke, ich wollte mir schon eine eigene Klasse schreiben.

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

B
22 Beiträge seit 2007
vor 13 Jahren

Auf Delimon.be hatte sich mal einer die Mühe gemacht, und die ganzen Routinen per
Invoke in eine Sytem.IO compatible Lib zu packen.

Leider ist die webseite down.
Deshalb hänge ich die Lib mal hier an

Ich würde diese Klasse sehr gerne verwenden, weil ich mit diesem PathTooLongException einen nie endenen Kampf habe.

Problem ist eher, dass die Assembly keinen starken Namen hat und ich sie deswegen nicht verwenden kann. Gibt es irgendwo noch diese Assembly mit starken Namen?