微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++/WinRT 处理来自 StorageFolder::GetFileAsync 的异常

如何解决C++/WinRT 处理来自 StorageFolder::GetFileAsync 的异常

当不存在文件时,应用程序会抛出一个我无法捕捉到的异常 在下面的示例代码中,我创建了一个目录“MyFolder”并保存了一个文件“”并将文件“sample.txt”保存到其中。 然后我调用函数 FindFileAsync 两次 - 首先使用已经创建的文件“sample.txt”,它工作正常,然后使用一个不存在的文件“nofile.txt”,它因错误而失败 FindFile.exe 中的 0x00007FF94E39D759 处引发异常:Microsoft C++ 异常:内存位置处的 winrt::hresult_error。 这个问题有没有解决办法。

MainPage.h

import {get} from "../../utils";

export const getDictWords = () => {
      return get('https://jsonplaceholder.typicode.com/posts');
}

MainPage.cpp

#pragma once

#include "MainPage.g.h"

namespace winrt::FindFile::implementation
{
    struct MainPage : MainPageT<MainPage>
    {
        MainPage();
        Windows::Foundation::IAsyncAction FindFileAsync(hstring value);
        Windows::Foundation::IAsyncAction GetFolderAsync(hstring const& value);
        Windows::Foundation::IAsyncAction CreateFileAsync(hstring const& fname);
        Windows::Foundation::IAsyncAction DeletefileAsync(Windows::Storage::StorageFile const & value);

        void ClickHandler(Windows::Foundation::IInspectable const& sender,Windows::UI::Xaml::RoutedEventArgs const& args);
    private:
        hstring folderDir{ L"MyFolder" };
    };
}

namespace winrt::FindFile::factory_implementation
{
    struct MainPage : MainPageT<MainPage,implementation::MainPage>
    {
    };
}

解决方法

在 C++/WinRT 中,一些异常(但不是全部)会强制调试器暂停程序执行,尽管正在处理异常(在 try 块中抛出)。但是,您可以通过按 F5 或在没有调试器的情况下启动应用程序(CTRL+F5 或通过开始菜单)来恢复它。我不确定这是错误还是预期行为。

,

我找到了一个对我有用的解决方案。 当调试器触发异常时,消息包含一个选中的复选框。如果取消选中并且程序继续到最后,问题就解决了。再次运行时,不会触发错误,并且 catch 可以处理“找不到文件”。不知道为什么默认设置是触发异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。