Laden...

Pfadlänge überschritten, was kann ich tun ?

Erstellt von Midnight Run vor 14 Jahren Letzter Beitrag vor 14 Jahren 4.604 Views
Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren
Pfadlänge überschritten, was kann ich tun ?

Hallo Freunde,
ich arbeite zurzeit an einer Application die Daten vom lokalen System auf ein anderes tranferiert. Nun bin ich seit einigen Stunden an einem Bug und habe bemerkt, dass es daran lag das meine Anwendung auf des Desktop lag. Dies bewirkt das der Pfad "C:\Dokumente..........." ist und die Dateien die ich hochlade auch nicht gerate kurze Namen haben und sich in einer komplexen Ordnerstruktur befinden.

Meine Frage ist eigentlich wie ich am besten mit diesem Problem umgehen sollte. Ich habe die MSDN abgesucht nach sowas, konnte aber nichts finden.

Gibt es eine Exception die ich schmeissen könnte ? Mir fällt keine ein. Und da dies ein Problem ist was in jedem Programm vorkommen könnte wäre ich über Tipps echt froh.

Danke und eine schöne Woche wünsche ich euch 😄

P
60 Beiträge seit 2006
vor 14 Jahren

Hallo Midnight Run,

da die Dateien ja bereits auf eibnem Windows System gespeichert sind, sollte das Problem eigentlich in deiner Applikation nicht auftreten.

Windows hat eine max. Pfadlänge / Namenslänge von 260 Zeichen. Bei "C" gabs da ne Konstante MAX_PATH, die eben auf 260 definiert war.

Du musst halt in deiner Applikation auch solch einen konstanten Wert vorsehen, wenn du irgendwelche API Aufrufe machst im Bereich von Pfaden oder Dateinamen. Dann dürfte das Problem weg sein.

Gruß
Proper_csharp

Gelöschter Account
vor 14 Jahren

wenn die pfadlänge überschritten wird, dann schmeißt windows von sich aus eine exception. wenn du das über die .net klassen machst (kopieren oder sonst was), schmeißen diese eine exception.

generell kannst du dabei nciht wirklich viel tun. du kannst höchstens ein laufwerk auf den ordner mounten um dann darauf zuzugreifen.

U
36 Beiträge seit 2008
vor 14 Jahren

Hallo Midnight Run,

wenn das Problem wirklich die Pfadlänge sein sollte, kannst du zum Kopieren die API-Funktion CopyFile benutzen. Wenn du bei dieser Funktion das Prefix "\?" vor die Pfadangabe setzt, kannst du mit Pfadangaben bis zu einer Länge von 32767 Zeichen arbeiten.

Unter File Management Functions findest du eine Übersicht über alle Dateifunktionen, die die API bietet und die alle mit langen Pfadangaben klarkommen.

Codebeispiel zum Aufruf von Copy File



   [DllImport("kernel32.dll", EntryPoint = "CopyFileW", SetLastError = true, CharSet = CharSet.Unicode)]

    [return: MarshalAs(UnmanagedType.Bool)]
    
    private static extern bool _api_CopyFile(
      [In] [MarshalAs(UnmanagedType.LPWStr)]
        string existingFileName,
      [In] [MarshalAs(UnmanagedType.LPWStr)]
        string newFileName,
      [MarshalAs(UnmanagedType.Bool)]
        bool failIfExists);


Gruß

Michael Schmitz

Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren

Großen Dank erstmal für die Antworten.

@ Hotzenplotz257, ich werde mir das aufjedenfall heute Abend näher ansehen.

@ JAck30lena, mein Problem war das ich zurzeit mit einer zweiten Person an einem Programm arbeite, was die Funktion besitzt Zip Dateien zu entpacken(lokal) und dann zu einem anderen System schickt.

Bei mir lief alles super aber bei dem anderen nicht. Wir benutzt DotNetZip als Lib für das Handle von Zip Dateien.

Bei ihm kamm immer der Fehler das, dass Verzeichniss nicht entpack werden könnte. Bis wir bemerkten das er den Source auf dem Desktop ausführte 😄

Gelöschter Account
vor 14 Jahren

dann müsst ihr den desktop mappen, entpacken und dann das mapping wieder aufheben.

3.971 Beiträge seit 2006
vor 14 Jahren

Der Grund für die Fehlermeldung liegt an den Restriktionen für FAT-Dateisysteme. NTFS-Funktionen und Funktionalitäten werden leider vom Io-Namespace nur sehr mäßig unterstützt.

Wie man eine Datei (FileStream mit langem Dateiname bis 32.000 Zeichen) öffnet und damit arbeitet, kann man beispielsweise .NET 2.0 Workaround for PathTooLongException nachlesen.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren

dann müsst ihr den desktop mappen, entpacken und dann das mapping wieder aufheben.

Mappen höre ich leider zum ersten mal 😄 Ich müsste es mir mal ansehen.

@kleines_eichhoernchen : Danke für den Sourcecode, Hotzenplotz257 hat ja die selbe Methode schon weiter oben erwähnt.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Midnight Run,

Mappen höre ich leider zum ersten mal

gemeint ist wohl eine normale Ordner-Freigabe für einen Order auf halben Weg des Pfads anzulegen und für den restlichen Teil des Pfades über diese Freihabe zuzugreifen.

herbivore