Подтвердить что ты не робот

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 позже.

Итак, мой вопрос: кто-нибудь знает о функции, которая позволит мне переименовать недопустимый каталог?

4b9b3361

Ответ 1

Вы можете использовать стандартную функцию Windows API MoveFile(), если вы передадите имя папки специальным образом:

MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed');

вместо

MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed');

Подробнее об этом можно узнать в MSDN под "Именование файлов, путей и пространства имен" . Обратите внимание, что он специально рекомендует не помещать конечные точки в имена файлов.