2011-06-08 8 views
7

¡Es realmente una locura! He creado un archivo usando Far 2.0 (http://www.farmanager.com/, tal vez puede usar algún otro administrador de archivos); su nombre de archivo es 'C: \ 123.txt' (sí, con espacio al final de la ruta de archivo).No se pueden copiar/mover archivos con espacio al final del nombre de archivo

Y yo estoy tratando de copiar o mover este archivo usando un programa en C#:

File.Copy("C:\\123.txt ", "C:\\456.txt", true); 

pero falla con el "archivo 'C: \ 123.txt' No se pudo encontrar." excepción. ¡Pero el archivo existe!

estoy tratando la API de Windows:

[DllImport("kernel32.dll")] 
public static extern int MoveFile(string lpExistingFileName, string lpNewFileName); 
MoveFile("C:\\123.txt ", "C:\\456.txt",); 

pero fracasa también.

Y estoy tratando la utilidad xcopy:

C:\>xcopy "C:\123.txt " "C:\456.txt" /Y 
File not found - 123.txt 
0 File(s) copied 

Como puedo puede cambiar el nombre del archivo mediante programación? ¿Y por qué pasa esto?

Mi SO: Windows 7 x64

+0

¿Qué sucede si usa '@" "" C: \ 123.txt "" "'? – zerkms

+1

¿Cómo se creó ese archivo? Normalmente, el espacio en blanco se trunca. – leppie

+0

zerkms, Caracteres ilegales en la ruta. –

Respuesta

10

Usted tiene un carácter en su nombre de archivo que es ilegal en Win32. Para eludir el analizador de rutas de Win32, solo tiene que ponerle un prefijo al nombre de archivo con \\?\. Por ejemplo:

MoveFile(@"\\?\C:\123.txt ", "C:\\456.txt"); 

Esta técnica también le permitirá tener caminos hasta 32k de longitud (que sólo recibe 260 que incluye la letra de unidad en Win32).

+0

¡Genial! Muchas gracias –

+0

Eso funcionó para mí, pero FindFirstFile/FindNextFile no me devuelve el espacio. – malkia

+1

@malkia: Si tiene un problema con los nombres de archivo no válidos, siempre puede usar el nombre corto 8.3 si está disponible. – Gabe

0

Se puede acceder al archivo con un carácter ilegal después del espacio

C:\123.txt :illegal 

El: y todo lo que posteriormente será eliminado, pero el espacio se mantendrá. También puede crear archivos que terminan en un espacio de esta manera.

Cuestiones relacionadas