shFileoperation и немецкий умляут
У меня есть эта функция.
procedure DeleteToBin(filename:string);
var
fileOpStruct : TSHFileOpStruct;
filename_a :ansistring;
begin
filename_a := filename + #0#0;
//showmessage(filename_a);
fileOpStruct.Wnd := Application.MainFormHandle;
fileOpStruct.wFunc := FO_DELETE;
fileOpStruct.pFrom := PAnsiChar(filename_a);
fileOpStruct.fFlags := FOF_ALLOWUNDO + FOF_NOCONFIRMATION;
SHFileOperation( fileOpStruct );
end;
Он хорошо работает с обычными путями и файлами, такими как: C:\mypath\myfile.ext
, Но как только я справляюсь с файлами, включая немецкий Umlaute, он не работает, например: C:\mypööö\myfileüüü.ext
Я пробовал каждую конверсию, которую мог придумать (например, UTFtoANSI), но не получил желаемого эффекта. Кстати: showmessage показывает правильное читаемое немецкое имя файла.
какое преобразование необходимо, чтобы оно работало?
1 ответ
Решение
Благодаря Реми, Дэвиду и utf8Decode я запустил его так: (Отредактировано 2018-04-17)
procedure DeleteToBin(filename:string);
var
fileOpStruct : TSHFileOpStructW;
filename_a :string;
begin
filename_a := utf8Decode('p:\bilder\0_test\mümü.txt' + #0);
fileOpStruct.Wnd := Application.MainFormHandle;
fileOpStruct.wFunc := FO_DELETE;
fileOpStruct.pFrom := PWideChar(filename_a);
fileOpStruct.fFlags := FOF_ALLOWUNDO + FOF_NOCONFIRMATION;
showmessage(inttostr(SHFileOperationW( @fileOpStruct )));
end;