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

时间:2013-07-18 17:45:17

标签: c# windows-runtime

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

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

第120行是DeleteAsync行。

2 个答案:

答案 0 :(得分:4)

我怀疑你的path值存在问题。我已经在这个主题上写了blogpost,因为WinRT异常可能非常不一致和误导。

我建议用两件事来帮助你了解事情:

  1. 检查StorageFile.Path属性的值,并确保其中没有双\,并且它确实指向ApplicationData.Current.LocalFolder文件夹。
  2. 尝试使用相同路径调用FileIO.ReadBufferAsync。你可能会得到一个更好的例外。
  3. 另外,如果您已经拥有完整路径而不是操纵字符串,为什么不简单地调用StorageFile.GetFileFromPathAsync

答案 1 :(得分:0)

我的猜测是你在你想要删除的路径上留下一个斜线 - 你正在替换文件夹路径,而iirc不包括尾部斜杠。