|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
переименование файла в имени которого есть иерголифы
Здравствуйте, уважаемые форумчане!
Обращаюсь к вам за помощью, очень надеюсь на то, что поможете решить проблему. Задача: Есть файлы, в именах которые присутствуют левые символы неправильной кодировки. Половина символов - русские буквы, но с ними вроде не возникает проблема, а есть один символ "─" (тире длинное). Вот когда это тире присутствует в файле, программа не может его переименовать и выдает ошибку: "Не удается найти указанный файл". Код которым переименовываю: Код:
procedure TForm1.Button3Click(Sender: TObject); var path, filename: String; begin path := 'D:\test\'; filename := '00000.XML_─шЁхъ_юЁ'; if not(RenameFile(path+filename, path+'1.txt')) then showMessage(SysErrorMessage(GetLastError)); end; Если убираю это тире то нормально переименовывает. Пробовал UTF8Decode: Код:
RenameFile(UTF8Decode(path+filename), UTF8Decode(path+'1.txt')) Помогите, пожалуйста, советом. Погуглить пытался ничего не нашел, может плохо искал, конечно. Заранее спасибо! |
#2
|
||||
|
||||
Цитата:
Код работоспособный, проверил в XE (Win7 x64). Как альтернативу, могу предложить такой вариант Код:
function AddAccentToFilename( Path, OldName, NewName: WideString ): Boolean; begin Result := MoveFileW( Pointer( Path + OldName ), Pointer( Path + NewName ) ); end; procedure TForm1.Button2Click(Sender: TObject); begin if not AddAccentToFilename( 'D:\test\', '00000.XML_─шЁхъ_юЁ', '1.txt' ) then ShowMessage( SysErrorMessage( GetLastError ) ); end; |
#3
|
|||
|
|||
Да код работоспособный, но проблема именно с файлом если есть иероглиф. Причем если просто русские буквы или тире он работает отлично.
Прикладываю для примера проблемный файл: incorrect_file.rar Он даже в архив не хотел запаковываться, сначала в папку пришлось положить. |
#4
|
||||
|
||||
Цитата:
О каком иероглифе идет речь? Имя файла в архиве выглядит так верно? Если так, то и твой вариант, и вариант приведенный мной, отлично справляются и переименовывают файл... |
#5
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var ws: WideString; begin ws := WideString('D:\test\00000.XML_') + #$2500 + WideString('шЁхъ_юЁ'); if MoveFileW(Pointer(ws), 'D:\test\1.txt') then ShowMessage('OK') else RaiseLastOSError; end; Цитата:
|