2012-06-26 5 views
12

У меня есть приложение, которое создает недопустимые каталоги ... например. c:\Program Files\somedirectory. - период является частью имени каталога.Delphi: Переименование недопустимой папки

Теперь я пробовал все, что знаю о переименовании файла в delphi.

  • RenameFile (file1, file2)
  • MoveFile (File1, File2)
  • и т.д ...

Я пытался получать окна короткий путь ExtractShortPathName, но это просто возвращает пустую строку , (позвонить в интерпретаторе команд: «ПЕРЕИМЕНОВАТЬ ShortOldName NEWNAME»)

Теперь я знаю, что могу вручную сделать это в ЦМД, но я не собираюсь тратить время, чтобы пройти через все мои файлы и делать это;)

Вот немного моего кода:

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.

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

ответ

16

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

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

вместо

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

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

+0

Работал идеально. Спасибо! Поиск везде. Я знал, что SO не разочарует. –

Смежные вопросы