Hallo zusammen,
heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:
Beim Versuch eine Datei mit Pfadlänge größer als 260 Zeichen zu kopieren, kriege ich eine Exception. Wie kann ich solche Dateien mit .NET (C#) koppieren?
Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
Das Problem, das Sie haben, liegt an einer Limitierung, nämlich MAX_PATH in der Windows API. Die .NET Framework ist von der Windows API stark abhängig und deswegen existiert die 260-Zeichen-Limitierung auch hier.
In der Windows API gibt es eine Möglichkeit, die MAX_PATH-Limitierung umzugehen, indem man das "\\?\"-Präfix vor dem Dateipfad verwendet und die Unicode Version der Windows API aufruft. In diesem Fall können Namen bzw. Pfade eine Länge von bis zu 32K Zeichen haben.
Dieser Einsatz ist aber in .NET nicht direkt vorhanden, weil das "\\?\"-Präfix verschiedene Sicherheits-, Kompatibilitäts- und Inkonsistenzprobleme verursachen kann.
Eine Möglichkeit, längere Dateinamen und Pfade zu verwenden, ist P/Invoke: die entsprechende Unicode Windows API-Funktion mit Präfix \\?\ aufzurufen.
Das folgende Beispiel zeigt wie man P/Invoke verwenden kann, um eine Datei zu löschen:
using System;
using System.Runtime.InteropServices;
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeleteFile(string lpFileName);
public static void Delete(string fileName) {
string formattedName = @"\\?\" + fileName;
DeleteFile(formattedName);
}
Weitere Informationen, Erläuterungen der Gründe für diese Limitierung, Richtlinien für Vermeidung des Problems und weitere Lösungsvorschläge finden Sie auf den folgenden Seiten:
1. BCL Team Blog: Long Paths in .NET
2. MSDN: Naming Files, Paths, and Namespaces
Wollen Sie mehr über die Windows APIs lernen, besuchen Sie dann die folgende MSDN-Online Webseite:
3. MSDN: Windows API
Viele Grüße,
Atanas Dimitrov
MSDN Hotline für MSDN Online Deutschland
Disclaimer:
Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline

Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.