如何解决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 举报,一经查实,本站将立刻删除。