gpt4 book ai didi

c++ - 如何使用 PathCreateFromUrlA API

转载 作者:行者123 更新时间:2023-11-28 01:21:46 25 4
gpt4 key购买 nike

我需要将 file:///C:/test folder/file.text 之类的 uri 路径转换为 ​​Windows 样式路径 C:/test folder/file.text .为此,我正在尝试使用 PathCreatesFromUrlA API 使用以下代码,但我只是不明白如何设置 API 的最后两个参数(在下面的代码中标记为 ???)。

std::string uri("file:///C:/test folder/file.text");  
char buf[255];
auto result = ::PathCreateFromUrlA(uri.c_str(), buf, ???, ???);

PathCreateFromUrlA 声明如下。

LWSTDAPI PathCreateFromUrlA(_In_ PCSTR pszUrl, _Out_writes_to_(*pcchPath, *pcchPath) PSTR pszPath, _Inout_ DWORD *pcchPath, DWORD dwFlags);

据此,第三个参数是指向DWORD的指针,我不明白它的用途是什么以及如何使用它。第四个参数是一些标志的 DWORD。 shlwapi.h 声明了以下标志

#define URL_UNESCAPE                    0x10000000
#define URL_ESCAPE_UNSAFE 0x20000000
#define URL_PLUGGABLE_PROTOCOL 0x40000000
#define URL_WININET_COMPATIBILITY 0x80000000
#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000
#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
#define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO
#define URL_ESCAPE_SPACES_ONLY 0x04000000
#define URL_DONT_SIMPLIFY 0x08000000
#define URL_NO_META URL_DONT_SIMPLIFY
#define URL_UNESCAPE_INPLACE 0x00100000
#define URL_CONVERT_IF_DOSPATH 0x00200000
#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000
#define URL_INTERNAL_PATH 0x00800000 // Will escape #'s in paths
#define URL_FILE_USE_PATHURL 0x00010000
#if (_WIN32_IE >= _WIN32_IE_IE60SP2)
#define URL_DONT_UNESCAPE 0x00020000 // Do not unescape the path/url at all
#endif // _WIN32_IE_IE60SP2
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define URL_ESCAPE_AS_UTF8 0x00040000 // Percent-encode all non-ASCII characters as their UTF-8 equivalents.
#endif // (NTDDI_VERSION >= NTDDI_WIN7)
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define URL_UNESCAPE_AS_UTF8 URL_ESCAPE_AS_UTF8
#define URL_ESCAPE_ASCII_URI_COMPONENT 0x00080000 // Percent-encode all ASCII characters outside of the unreserved set from URI RFC 3986 (a-zA-Z0-9-.~_) (i.e.) No need for URL_ESCAPE_PERCENT along with this.
#define URL_ESCAPE_URI_COMPONENT (URL_ESCAPE_ASCII_URI_COMPONENT | URL_ESCAPE_AS_UTF8)
#define URL_UNESCAPE_URI_COMPONENT URL_UNESCAPE_AS_UTF8
#endif // (NTDDI_VERSION >= NTDDI_WIN8)
#define URL_ESCAPE_PERCENT 0x00001000
#define URL_ESCAPE_SEGMENT_ONLY 0x00002000 // Treat the entire URL param as one URL segment.

#define URL_PARTFLAG_KEEPSCHEME 0x00000001

#define URL_APPLY_DEFAULT 0x00000001
#define URL_APPLY_GUESSSCHEME 0x00000002
#define URL_APPLY_GUESSFILE 0x00000004
#define URL_APPLY_FORCEAPPLY 0x00000008

我不知道哪个标志适合我的用例。有什么建议吗?

最佳答案

第三个参数表示缓冲区的大小(很可能包含函数返回后写入或需要的字符数)。 MSDN说第四个参数是保留的,必须是0。

std::string uri("file:///C:/test folder/file.text");  
char buf[MAX_PATH];
DWORD cch = ARRAYSIZE(buf);
HRESULT hr = ::PathCreateFromUrlA(uri.c_str(), buf, &cch, 0);
if (SUCCEEDED(hr)) ...

关于c++ - 如何使用 PathCreateFromUrlA API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com