Не могу скопировать / переместить файлы с пробелом в конце имени файла - PullRequest
9 голосов
/ 08 июня 2011

Это действительно безумие! Я создал файл, используя Far 2.0 (http://www.farmanager.com/,, возможно, вы можете использовать какой-нибудь другой файловый менеджер); его имя файла 'C: \ 123.txt' (да, с пробелом в конце пути к файлу) .

И я пытаюсь скопировать или переместить этот файл с помощью программы на C #:

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

Но происходит сбой с сообщением «Не удалось найти файл« C: \ 123.txt ».» исключение. Но файл существует!

Я пытаюсь использовать Windows API:

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

Но и это не помогает.

И я пытаюсь использовать утилиту xcopy:

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

Как я могу переименовать файл программно? И почему это происходит?

Моя ОС: Windows 7 x64

Ответы [ 2 ]

12 голосов
/ 08 июня 2011

В вашем имени файла есть символ, который недопустим в Win32.Чтобы обойти синтаксический анализатор Win32, вам просто нужно добавить к имени файла префикс \\?\.Например:

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

Этот метод также позволит вам иметь пути длиной до 32 КБ (вы получите только 260, включая букву диска в Win32).

0 голосов
/ 15 июня 2013

Вы можете получить доступ к файлу с недопустимым символом после пробела.

C:\123.txt :illegal

. Все и после будут удалены, но пробел останется.Вы также можете создавать файлы, заканчивающиеся пробелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...