C# 如何检测UWP应用程序中是否重命名或删除了StorageFile?

C# 如何检测UWP应用程序中是否重命名或删除了StorageFile?,c#,windows-10,uwp,storagefile,C#,Windows 10,Uwp,Storagefile,对于Windows应用商店应用程序:在应用程序中打开的StorageFile在应用程序外是否被重命名或删除,如何检测 我有一个Windows 10 UWP应用程序在桌面上运行。该应用程序允许用户打开和编辑文档 我尝试过的事情: 检查修改日期: 我尝试检查storageFile.GetBasicPropertiesAsync()。(我假设它使用内存版本,不检查磁盘上的文件) 重新打开存储文件: 然后,我尝试使用StorageFile.getfilefrompathsync(file.Pat

对于Windows应用商店应用程序:在应用程序中打开的
StorageFile
在应用程序外是否被重命名或删除,如何检测

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

我尝试过的事情:

  • 检查修改日期
    • 我尝试检查
      storageFile.GetBasicPropertiesAsync()。(我假设它使用内存版本,不检查磁盘上的文件)
  • 重新打开存储文件
    • 然后,我尝试使用
      StorageFile.getfilefrompathsync(file.Path)
      重新打开该文件。这在第一次正确地抛出了一个
      FileNotFoundException
    • 但是,随后此操作失败,出现了
      未经授权的访问/权限被拒绝
      异常。这有点道理,因为我需要用户在FileOpenPicker中选择文件,让我的应用程序获得使用它的权限
  • 监视父文件夹:
    • 这一次没走远。我尝试使用
      StorageFolder.CreateFileQuery()
      ,但无法从StorageFile实例访问父文件夹(同样,这是有道理的,因为我的应用程序没有访问父文件夹的权限)

即使在UWP应用程序中,您也可以使用
System.IO.File.Exists(字符串)

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

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
}