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;    
Другие вопросы по тегам