|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не могу переименовать файл в имени которого есть юникод-символ...
Здравствуйте.
пишу на Delphi 7 (вынужден. перейти на другую не могу) пытаюсь переименовать файл: Код:
if renamefile(fname1,fname2) then ShowMessage('Файл успешно переименован!') else ShowMessage('Ошибка! Вот ее код: '+IntToStr(GetLastError)); появляется код ошибки: 123. Все от того, что в имени файла есть юникод символы (национальные буквы которых нет в ASCII). когда читаю их в проге вместо этих букв показывает "?". Почитал, что в этом случае нужно использовать для манипуляций с файлами WinAPI функции с постфиксом W (unicode) т.к. в Delphi 7 используются вызовы WinAPI функций с постфиксом A - для ANSI. Также нельзя использовать обычный FindFirst, т.к. он имя файла тоже в ANSI отдает. нужно использовать FindFirstFileW() из WinAPI. в итоге написал следующее: Код:
var H: THandle; D: TWIN32FindDataW; StrDir,FileName,NewFileName: widestring; aDir: string; begin aDir:='D:\BagName'; // в этой папке лежит единственный файл с юникод-символом в имени. StrDir := IncludeTrailingBackslash(aDir); // просто добавляем "\" если нужно H:= FindFirstFileW(pwidechar(StrDir+'*.*'),D); repeat if (H<>INVALID_HANDLE_VALUE) and (D.cFileName <> widestring('.')) and(D.cFileName<>widestring('..')) then begin FileName:=d.cFileName; // тут уже должно быть Исходное имя в Юникоде, ведь используется TWIN32FindDataW NewFileName:=aDir+'test.mp3'; // переименовать нужно просто в test.mp3 if MoveFileW(PWideChar(FileName),PWideChar(NewFileName)) then begin ShowMessage('Файл перемещен!') end else begin ShowMessage('Ошибка: '+IntToStr(GetLastError)+' '+SysErrorMessage(GetLastError)); end; end; until not FindNextFileW(H,D); Windows.FindClose(H); Результат выполнения ---> "ошибка 2: Не удается найти указанный файл!" а все потому, что не смотря на все манипуляции --- имя файла в d.cFileName - все равно почему-то в ANSI -- т.е. юникод символ заменен на "?" что же не так? Как же все-таки переименовать этот файл? всю голову уже сломал( Помогите, кто сможет. |