File.Copy PfadLänge

09/10/2009 - 08:47 von Boas Enkler | Report spam
Hallo

Hat hier schonmal jemand Probleme mti der Pfadlànge bei
System.IO.File.Copy gehabt und hat diese gelöst ?

Meinen Recherchen zur Folge kommt File.Copy nur mit 256 Zeichen
zurecht (auch unter Vista).
Anscheinend weil intern nicht die UniCode Variante für das CreateFile
verwendet wird.

Weiß jemand ob es schon entsprechende Klassem gibt die ggf. die
UniCode Variante aufrufen ?
 

Lesen sie die antworten

#1 Kerem Gümrükcü
09/10/2009 - 15:53 | Warnen spam
Hallo,

ich glaube, da liegt bei Dir ein Denkfehler vor:

Hat hier schonmal jemand Probleme mti der Pfadlànge bei
System.IO.File.Copy gehabt und hat diese gelöst ?



Bis heute noch nicht, da ich immer bevor ich was kopiert/gelöscht,
erzeugt, etc. habe es immer überprüft habe, bzw. mit vorhandenen
und validen Pfaden aus dem System heraus geabreitet habe. Wenn
Du Dateinamen/Pfade oder beides erzeugst, dann solltest Du die
Lànge immer überprüfen.

Meinen Recherchen zur Folge kommt File.Copy nur mit 256 Zeichen
zurecht (auch unter Vista).



Die exakte Angabe im File.Copy Dokuteil ist folgende (kennst
Du u.U. sicher!)

"Der angegebene Pfad und/oder der Dateiname überschreiten die vom
System vorgegebene Höchstlànge. Beispielsweise müssen Pfade auf
Windows-Plattformen weniger als 248 Zeichen und Dateinamen
weniger als 260 Zeichen haben. "

Anscheinend weil intern nicht die UniCode Variante für das CreateFile
verwendet wird.



Das glaube ich nicht, ich glaube, das es schon Unicode ist, habe
aber noch nicht auf den .NET Source geschaut, gehe aber davon
aus,...

Weiß jemand ob es schon entsprechende Klassem gibt die ggf. die
UniCode Variante aufrufen ?



So was ist doch wirklich schnell geschrieben, bzw, da nimmst Du folgende
Win32 API und fertig:

http://www.pinvoke.net/default.aspx...yFile.html

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
static extern bool CopyFile(string lpExistingFileName, string lpNewFileName,
bool bFailIfExists);

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, CallingConvention =
CallingConvention.StdCall, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CopyFile(
[MarshalAs(UnmanagedType.LPStr)]string lpExistingFileName,
[MarshalAs(UnmanagedType.LPStr)]string lpNewFileName,
[MarshalAs(UnmanagedType.Bool)]bool bFailIfExists);

Notes:

use \\?\UNC\<server>\<share>\<path>\<filename> to access files over the
network with long paths - NathanV.

Grüße

Kerem

Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/soft...iceremover
Latest Open-Source Projects: http://entwicklung.junetz.de

Ähnliche fragen