3 Stimmen

Wie kopiere ich eine Datei an einen neuen Speicherort mit einer Pfadlänge von mehr als 260 Zeichen in Vista?

In meiner vorherigen Frage wie folgt:

" Wie erstellt man eine Kopie einer Datei mit mehr als 260 Zeichen Länge? ."

Ich habe fast die gleiche Frage gestellt und bekam die Lösung, den Verzeichnisnamen umzubenennen und dann an einen neuen Ort zu kopieren. Aber gemäß den Anforderungen des Kunden können wir das Verzeichnis nicht in jedem Fall umbenennen.

Mein Problem ist nun, wenn wir versuchen, eine Datei zu kopieren, deren Pfadlänge (einschließlich Dateiname) größer ist als 260 Zeichen (z. B. 267 Zeichen), können wir manuell kopieren, aber unter dem Betriebssystem Vista kommt es zu einer programmtechnischen Ausnahme.

Bitte lassen Sie mich wissen, ob jemand eine Lösung hat.

3voto

j_random_hacker Punkte 49159

Vorangestellt. \\?\ zu Ihrem Pfad hinzufügen, um Pfadlängen von bis zu 32767 Zeichen zu ermöglichen. z.B:

copy \\?\C:\big\dir\hierarchy\myfile.txt \\?\C:\tohere.txt

Diese Seite enthält weitere Einzelheiten.

Ich habe dies nur getestet mit DIR in WinXP, aber das scheint zu funktionieren.

1voto

lakshmanaraj Punkte 4130

Wenn das Problem nur mit der Länge der Datei zusammenhängt (und nicht mit dem vorangestellten Pfad), dann können Sie die Kurzversion der Datei verwenden (wahrscheinlich Outloo~1.xls ).

Die einzige wirklich praktikable Lösung ist jedoch die Verwendung einer Netzwerkumleitung oder eines SUBST-Befehls, um den Pfad zu verkürzen. Ich kann mir vorstellen, dass Sie die Pfadlänge in Ihrem Programm verfolgen und einen SUBST-Laufwerksbuchstaben erzeugen müssten, wenn die Länge überschritten wird... und den Laufwerksbuchstaben löschen, wenn er nicht mehr benötigt wird. Hässliche Programmierung, aber keine Hoffnung.

Oder

Ich kenne einige Unicode-Version von Windows api Funktionen (copyfileex..? http://msdn.microsoft.com/en-us/library/aa363852(VS.85).aspx ) kann bis zu 32.767 Zeichen verarbeiten.

Versuchen Sie, einen Namen mit einem \\ ?\-Präfix, zum Beispiel, \\ ? \D : \. Ich bin nicht sicher, ob CLR diese Art der Benennung verwendet, aber Sie können es versuchen.

0 Stimmen

Wie Sie vorschlagen, habe ich die API-Funktion CopyFile geschrieben, die den Dateipfad mit vorangestelltem " \\ ?\", aber ich erhalte keine Ausgabe, obwohl kein Fehler angezeigt wird. Bitte schlagen Sie vor...

0 Stimmen

Bitte überprüfen Sie Ihre Dateibenennungskonvention über msdn.microsoft.com/de-us/library/aa365247(VS.85).aspx Prüfen Sie auch auf copyfileEx. Das könnte helfen.

0voto

VonC Punkte 1117238

Sie könnten prüfen, ob Komprimierungstools wie 7zip sind durch die Länge des Pfads in Vista begrenzt.

Wenn nicht, bedeutet das, dass eine "Kopie durch das Programm" ausreichen würde:

  • komprimiert den Baum der Verzeichnisse/Dateien, die Sie kopieren möchten
  • Kopieren Sie die .zip/.rar-Datei an den Zielort
  • dekomprimieren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X