UWP调用DeleteAsync删除被占用文件时是否会抛出异常?
UWP DeleteAsync接口文件占用场景行为说明
- 结论:调用
IStorageItem.DeleteAsync()删除被占用的文件时,会抛出异常 - 异常详情:抛出的异常类型为
winrt::hresult_error,错误码通常为0x80070020,对应系统错误ERROR_SHARING_VIOLATION,即文件共享冲突、被其他进程/当前进程占用 - 处理建议:调用该异步接口时必须增加异常捕获逻辑,示例代码如下:
winrt::StorageFolder localFolder = winrt::ApplicationData::Current().LocalFolder(); try { winrt::StorageFile targetFile = co_await localFolder.GetFileAsync(L"待删除的文件名.txt"); co_await targetFile.DeleteAsync(winrt::StorageDeleteOption::PermanentDelete); // 此处补充删除成功的后续逻辑 } catch (const winrt::hresult_error& err) { if (err.code() == 0x80070020) { // 此处补充文件被占用场景的处理逻辑,例如重试、提示用户等 } else { // 此处补充其他错误场景的处理逻辑 } }
- 注意事项:如果是当前应用自身占用文件,需要提前关闭所有针对该文件的读写流、文件句柄后再执行删除操作,否则也会触发占用异常。
内容的提问来源于stack exchange,提问作者rsp
相关产品推荐
相关产品推荐

