FindFirst 返回英文文件夹 - Delphi
Posted
技术标签:
【中文标题】FindFirst 返回英文文件夹 - Delphi【英文标题】:FindFirst returns folders in English - Delphi 【发布时间】:2014-12-12 16:20:41 【问题描述】:早上好...我正在列出目录中的所有文件...但是我面临以下问题...当文件夹出现时全部为英文...但是操作系统是葡萄牙语国防部...如何根据操作系统语言列出:
例如:程序文件 (EN) -> Arquivos de Programa (PT)
if FindFirst (directory + '*. *', faAnyFile, search_rec) = 0 then
begin
repeat
Form4.ListView1.Items.Add.Caption: = search_rec.Name;
lista.Add (search_rec.Name);
Until FindNext (search_rec) <> 0;
FindClose (search_rec);
end;
【问题讨论】:
文件系统/操作系统首先报告了类似的名称。您可以通过直接调用 Win32 APIFindFirstFile()
和 FindNextFile()
函数来验证这一点。
msdn.microsoft.com/en-us/library/bb759792%28v=vs.85%29.aspx 不过,为每个文件夹调用 SHGetFileInfo 可能并不完全有帮助。
感谢大家的指正。我一直认为在安装时操作系统使用本地化名称创建目录。我没有意识到它在文件系统中总是C:\Program Files
,然后在显示时有一些魔力。
@SertacAkyuz 因为具有本地化名称的 Windows 标准文件夹数量有限,因此创建包含英文和本地化名称的文件夹的查找列表,然后将找到的每个文件夹与该列表进行比较可能就足够了
@DavidHeffernan 据我所知,像 Program Files 这样的系统文件夹的本地化名称仅在 Windows 2000 之前使用。Windows 2000 也是第一个支持多语言用户界面 (MUI) 的 Windows。 MUI 中的数据确定为某个系统文件夹显示哪些名称。 Windows 2000 也是第一个 Windows 版本,它引入了可以通过使用特殊名称(如 %TEMP%)来访问的特殊文件夹。默认情况下,最常见的系统文件夹被创建为特殊文件夹,甚至可以为您的软件添加新的自定义特殊文件夹。
【参考方案1】:
好的葡萄牙语:
SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_DISPLAYNAME);
Listitem.Caption := FileInfo.szDisplayName;
【讨论】:
以上是关于FindFirst 返回英文文件夹 - Delphi的主要内容,如果未能解决你的问题,请参考以下文章
JAVA07_Stream流中FindFirst方法查找元素第一个
JAVA07_Stream流中FindFirst方法查找元素第一个