【问题标题】:Test full path to folder exists without relying on exception测试文件夹的完整路径存在而不依赖异常
【发布时间】:2021-09-18 11:33:17
【问题描述】:

我正在开发一个 C++ UWP / WinRT 应用程序, 并且想测试给定的字符串是否代表现有文件夹的路径,并且我想在不依赖捕获异常的情况下做到这一点。动机在底部。

查看UWP Storage API,似乎沿着这些路线唯一不使用异常来传达成功的例程是TryGetItemAsync(),不幸的是,这需要有一个StorageFolder,这是我唯一的方法'我们已经看到从完整路径字符串中获取StorageFolder 是通过GetFolderFromPathAsync(),它使用异常来传达失败。

动机:这只是一个傻瓜。即使被捕获,异常也会被记录到输出中并使它看起来像是失败了,这会减慢开发速度。也许我需要以更积极的方式抓住它。


编辑以包含将库存 C++ 代码与 UWP 进行比较的示例:

void cppTestFolder(const std::wstring path)
{
    bool existsCpp = !!(std::ifstream(path));
    bool existsUwp = UWP_Based_TestFolder(path);

    LogW(std::wstring(L"folder path exists ?  CPP: ") + (existsCpp ? L"yes" : L"no ") + L"  UWP: " + (existsUwp ? L"yes" : L"no ") + L"   path: " + path);
}

...
    cppTestFolder(L"C:\\Data");
    cppTestFolder(L"C:\\Data\\no_such_folder");
...

and logging output: (minus the annoying exception messages I want to avoid)

folder path exists ?  CPP: no  UWP: yes  path: C:\Data
folder path exists ?  CPP: no  UWP: no   path: C:\Data\no_such_folder

【问题讨论】:

    标签: c++ exception uwp storage


    【解决方案1】:

    测试文件夹的完整路径是否存在而不依赖异常

    恐怕您无法在不依赖异常的情况下检查文件夹是否存在。你可以参考document。推荐根据异常检查文件夹的方法。正如你上面提到的TryGetItemAsync 不是静态方法,所以它需要一个基本文件夹实例。

    对于这种情况,检查带有路径的文件夹的唯一方法是使用桌面桥。并处理桌面扩展中的文件夹检查并将结果发送回 UWP 客户端。桌面扩展没有这个限制,你可以使用File.Exists api 来检查存储项。对于桌面桥,您可以参考 stefan' bolg UWP with Desktop Extension

    【讨论】:

    • 恐怕你可以。请参阅下面的答案:)
    • 你测试过,在UWP平台上能用吗?
    • 本平台没有测试,但是我的C++是标准C++
    • 是的,我知道,但是 uwp 是在沙箱中运行的,它有特殊的存储访问限制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2011-04-04
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多