为什么在尝试删除文件时出现参数异常

本文关键字:参数 异常 文件 删除 为什么 | 更新日期: 2023-09-27 18:23:53

我正在运行以下代码来删除一个确实存在的文件:

 try
 {
      var folder = ApplicationData.Current.LocalFolder;
      var path = rendition.OfflineLocation.Replace(folder.Path, "");
      var file = await folder.GetFileAsync(path);
      await file.DeleteAsync();
 }
 catch (FileNotFoundException)
 {
 }

当运行时,file.DeleteAsync();给出ArgumentException,并显示消息Value does not fall within the expected range.

我在任何地方都找不到我为什么会得到这个的任何信息。有什么想法吗?

调用堆栈:

位于Windows.Storage.StorageFile.DeleteAsync()位于e:''''Services''DownloaderService.cs:line 120 中的Lightning.Services.DownloaderServices.d_36.MoveNext()

第120行是DeleteAsync行。

为什么在尝试删除文件时出现参数异常

我怀疑您的path值有问题。我已经写了一篇关于这个主题的博客文章,因为WinRT异常可能非常不一致和误导。

我建议两件事来帮助你弄清真相:

  1. 检查StorageFile.Path属性的值,并确保其中没有双',并且它确实指向ApplicationData.Current.LocalFolder文件夹
  2. 尝试使用相同的路径调用FileIO.ReadBufferAsync。你可能会得到一个更好的例外

此外,如果您已经有完整的路径,为什么不简单地调用StorageFile.GetFileFromPathAsync,而不是操作字符串呢?

我的猜测是,你在试图删除的路径前留下了一个斜杠——你正在替换文件夹路径,iirc不包括尾部斜杠。