shFileoperation 和德语变音符号
shFileoperation and german Umlaute
我有这个功能。
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
我尝试了所有我能想到的转换(比如 UTF 到 ANSI),但没有得到预期的效果。
顺便说一下:showmessage 显示了正确可读的德语文件名。
需要什么样的转换才能使其工作?
感谢 Remy 和 David 以及 utf8Decode,我通过这种方式得到了 运行:
(2018-04-17 编辑)
procedure DeleteToBin(filename:string);
var
fileOpStruct : TSHFileOpStructW;
filename_a :string;
begin
filename_a := utf8Decode('p:\bilder[=10=]_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;
我有这个功能。
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
我尝试了所有我能想到的转换(比如 UTF 到 ANSI),但没有得到预期的效果。 顺便说一下:showmessage 显示了正确可读的德语文件名。
需要什么样的转换才能使其工作?
感谢 Remy 和 David 以及 utf8Decode,我通过这种方式得到了 运行: (2018-04-17 编辑)
procedure DeleteToBin(filename:string);
var
fileOpStruct : TSHFileOpStructW;
filename_a :string;
begin
filename_a := utf8Decode('p:\bilder[=10=]_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;