1

对于 Windows 应用商店应用程序:我如何检测StorageFile在我的应用程序中打开时是否在我的应用程序之外重命名或删除了它?

我在桌面上运行了一个 Windows 10 UWP 应用程序。该应用程序允许用户打开和编辑文档。

我尝试过的事情:

  • 检查 DateModified
    • 我尝试检查storageFile.GetBasicPropertiesAsync().DateModified,但即使删除文件并清空垃圾箱,调用也会成功返回 (old) DateModified。(我假设它使用内存版本并且不检查磁盘上的文件)
  • 重新打开 StorageFile
    • 然后我尝试使用StorageFile.GetFileFromPathAsync(file.Path). FileNotFoundException这是第一次正确抛出。
    • 然而,后来这失败了,但有一个Unauthorized access/permission denied例外。这有点道理,因为我需要用户在 FileOpenPicker 中选择文件才能让我的应用程序获得使用它的权限。
  • 监控父文件夹:
    • 这个没有走多远。我尝试使用StorageFolder.CreateFileQuery(),但无法从 StorageFile 实例访问父文件夹(同样,这是有道理的,因为我的应用程序无权访问父文件夹)
4

2 回答 2

1

找到了一种检查文件是否被删除的好方法:

public async bool StorageFileExists(StorageFile file)
{
  try
  {
    var stream = await StorageFile.OpenReadAsync();
    stream.Dispose();
    return true;
  }
  catch (FileNotFoundException e)
  {
    return false;
  } //Other exceptions are not caught on purpose and should propagate
}
于 2020-02-27T16:51:50.513 回答
0

即使在 UWP 应用程序中,您也可以使用System.IO.File.Exists(String). https://msdn.microsoft.com/de-de/library/system.io.file.exists(v=vs.110).aspx

于 2017-01-12T14:01:53.440 回答