1

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

 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() 在 Lightning.Services.DownloaderService.d__36.MoveNext() 在 e:\\Services\DownloaderService.cs:line 120

第 120 行是 DeleteAsync 行。

4

2 回答 2

4

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

我建议两件事来帮助您了解事情的真相:

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

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

于 2013-07-19T04:51:28.817 回答
0

我的猜测是,您要在要删除的路径前添加一个斜杠 - 您正在替换文件夹路径,iirc 不包括尾部斜杠。

于 2013-07-18T18:02:20.613 回答