GetFileAttributesW 能否处理文件路径中的 url 编码空格 (%20)?

Can GetFileAttributesW handle url-encoded spaces (%20) in file paths?

函数调用:

OS_WRAPI::GetFileAttributesW(file_name_str); // file_name_str value is L"C:\Test%20Tool\test.exe"

returns INVALID_FILE_ATTRIBUTES.

函数调用:

OS_WRAPI::GetFileAttributesW(file_name_str); // file_name_str value is L"C:\TestTool\test.exe"

returns 个有效属性。

两条路径都存在。

如果文件路径中有 url 编码空格 (%20),如何获取文件属性?

Can GetFileAttributesW handle spaces in filepaths?

是的。

请注意 L"C:\Test%20Tool\test.exe" 不包含 space。也许你应该通过 L"C:\Test Tool\test.exe".

documentation 说:

If the function fails, the return value is INVALID_FILE_ATTRIBUTES. To get extended error information, call GetLastError.

所以你应该,如果 INVALID_FILE_ATTRIBUTES 被 returned,调用 GetLastError。我希望 return ERROR_PATH_NOT_FOUND.

如果问题实际上是

Can GetFileAttributesW handle L"%20" in filepaths?

答案仍然是肯定的。如果该路径确实存在,并且 GetFileAttributesW 是 returning INVALID_FILE_ATTRIBUTES,那么一定有其他问题,但是文件名中 L"%20" 的存在没有问题Windows API。再次从调用 GetLastError.

开始

也许这里真正有问题的是,您认为 Windows 使用 L"%20" 对文件系统中的字符串进行编码。它不是。在文件系统上,L"%20"L" " 是两个不同的名称。