如何在C++/WinRT中从URI对象提取带扩展名的文件名
解决方案
C++/WinRT 配套的 UWP 运行时库已经提供了开箱即用的实现,不需要自己手写字符串切割逻辑。
你用到的 winrt::Windows::Foundation::Uri 类自带 Name() 属性,返回值就是 URI 路径最后一段带完整扩展名的文件名,自动忽略查询参数、哈希片段,同时自带 URI 解码能力。
代码示例
#include <winrt/Windows.Foundation.h> using namespace winrt::Windows::Foundation; // 示例URI:带查询参数的下载地址 Uri downloadUri(L"https://sample.com/assets/安装包%20v2.1.0.msi?sign=xyz789"); // 仅需一行代码提取带扩展名的文件名 winrt::hstring targetFileName = downloadUri.Name(); // 执行后 targetFileName 为 L"安装包 v2.1.0.msi"
注意事项
- 如果 URI 路径以斜杠结尾(例如
https://sample.com/folder/),Name()会返回空字符串,这种场景建议补充兜底逻辑,要么取路径上一级分段作为文件名,要么指定默认文件名。 - 所有标准 URI 编码的特殊字符(比如空格对应
%20、中文对应编码串)都会被自动解码,不需要额外调用编码转换方法。
内容的提问来源于stack exchange,提问作者rsp
相关产品推荐
相关产品推荐

