![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 -- т.е. юникод символ заменен на "?" что же не так? Как же все-таки переименовать этот файл? всю голову уже сломал( Помогите, кто сможет. |