Delphi: переименование недопустимой папки
У меня есть приложение, которое создает недопустимые каталоги...
например c:\Program Files\somedirectory.
- период является частью имени каталога.
Теперь я пробовал все, что знаю о переименовании файла в delphi.
- RenameFile (file1, file2)
- MoveFile (File1, File2)
- и т.д...
Я попытался получить короткий путь к окнам ExtractShortPathName
, но это просто возвращает пустую строку.
(для вызова команды commandPrompt: "RENAME ShortOldName NewName" )
Теперь я знаю, что могу вручную сделать это в cmd, но я не собираюсь тратить время на все мои файлы и делать это;)
Вот немного моего кода:
xshortname := ExtractFileName(ExtractShortPathName(ns + oldName));
xNewName := newName;
cmdTxt := PWideChar('/C cd ' + ns);
cmdTxt2 := PWideChar(cmdTxt + '&&' + ' RENAME ' + xshortname + ' ' + #34 + xNewName + #34);
ShellExecute(0, nil, 'cmd.exe', cmdTxt2, nil, SW_SHOWNORMAL);
Я знаю, что shellExecute не лучший метод для использования здесь.
Я просто пытаюсь заставить стерню работать. Я буду беспокоиться о оптимизации и правильном кодировании Delphi позже.
Итак, мой вопрос: кто-нибудь знает о функции, которая позволит мне переименовать недопустимый каталог?
Ответы
Ответ 1
Вы можете использовать стандартную функцию Windows API MoveFile(), если вы передадите имя папки специальным образом:
MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed');
вместо
MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed');
Подробнее об этом можно узнать в MSDN под "Именование файлов, путей и пространства имен" . Обратите внимание, что он специально рекомендует не помещать конечные точки в имена файлов.