Winapi 使用Windows API获取文件的文件类型
我试图识别文件是PNG还是JPG,以便将其应用为壁纸。我正在使用Winapi 使用Windows API获取文件的文件类型,winapi,Winapi,我试图识别文件是PNG还是JPG,以便将其应用为壁纸。我正在使用SHGetFileInfo获取带有.szTypeName变量的类型名,但我刚刚意识到,如果操作系统使用另一种语言,它会发生变化 这是我的代码: SHFILEINFOW fileInfo; UINT sizeFile = sizeof(fileInfo); UINT Flags = SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES; // Getting file info to find out
SHGetFileInfo
获取带有.szTypeName
变量的类型名,但我刚刚意识到,如果操作系统使用另一种语言,它会发生变化
这是我的代码:
SHFILEINFOW fileInfo;
UINT sizeFile = sizeof(fileInfo);
UINT Flags = SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES;
// Getting file info to find out if it has JPG or PNG format
SHGetFileInfoW(argv[1], 0, &fileInfo, sizeFile, Flags);
这就是我验证的方式:
if (wcscmp(fileInfo.szTypeName, L"JPG File") == 0)
{
//Code here
}
当操作系统是西班牙语时,值会更改为“Archivo JPG”,因此我必须针对所有语言进行验证,这是没有意义的
知道我还可以使用什么函数吗?此API用于为已知文件类型生成面向用户的字符串表示1)。它不是用来实现代码逻辑的 更重要的是,它不会尝试解析文件内容。它仅在文件扩展名下工作。如果将Excel工作簿MySpreadsheet.xlsx重命名为MySpreadsheet.png,它会很高兴地报告这是一个“png文件” 您的问题的解决方案很简单:除了对文件扩展名进行过滤之外,您不必做任何事情。使用(或对于Windows 8及更高版本)从完全限定的路径名获取文件扩展名 如果用户附加了错误的文件扩展名,则此操作可能会失败。可以说,这不是应用程序应该解决的问题
另外,您将
SHGFI\u USEFILEATTRIBUTES
传递给SHGetFileInfoW
,但决定不向调用传递任何(第二个参数)。这是一个错误。有关详细信息,请参阅
1) 它在道德上等同于SHGFI\u DISPLAYNAME 谢谢你的回答!这就是我所需要的。我使用了
PathFindExtension
(PWSTR-findextension=PathFindExtensionW(argv[1])
函数并删除了所有SHGetFileInfoW
代码。