Консультация № 169061
06.06.2009, 23:52
0.00 руб.
0 2 0
Здравствуйте господа эксперты. Для переименования папок использую процедуру
Код:
uses ShellApi; 
procedure RenameDir(DirFrom, DirTo: string);
var
shellinfo: TSHFileOpStruct;
begin
If DirFrom = DirTo then
exit;
with shellinfo do
begin
Wnd := 0;
wFunc := FO_RENAME;
pFrom := PChar(DirFrom);
pTo := PChar(DirTo);
fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
FOF_SILENT or FOF_NOCONFIRMATION;
end;
SHFileOperation(shellinfo);
end;

Вызывается
Код:
RenameDir(S, sSearchPath);

Однако она переименовывает не все папки: к примеру не хочет из Альбом_20 МУЗЫКА В СТИЛЕ ЧИХ-ПЫХ сделать Al'bom_20 MUZYKA V STILE ChIH-PYH, тогда как спокойно переименовывает из Альбом_10 АРМАГЕДЕЦ ИЛИ ЧИХ-ПЫХ КИНГ-КОНГУ в Al'bom_10 ARMAGEDETs ILI ChIH-PYH KING-KONGU, при этом не вылазит ни каких ошибок или предупреждений. Пошаговое исполнение процедуры мне не помогает найти проблему. Подскажите где у меня закралась ошибка. Спасибо.

Обсуждение

давно
Профессионал
153662
1070
09.06.2009, 20:38
общий
Причём иногда даже постое имя Фото не переименовывает в Foto, а если убрать флаг FOF_SILENT, то в этот момент выдаётся сообщение "Ошибка при переименовании файла или папки. Не удаётся переименовать файл. Выберите для переименования только один файл. Для переименования группы файлов со схожими именами воспользуйтесь постановочным символами MS-DOS. "
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
09.06.2009, 21:43
общий
Короче разобрался сам. Нужно чтобы в конце строки с путями оканчивались двумя NULL символами и тогда проблем не возникает. Вот переделанные строчки
Код:
  pFrom  := PChar(DirFrom + #0#0);
pTo := PChar(DirTo + #0#0);
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа