我正在运行以下代码来删除确实存在的文件:
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行。
答案 0 :(得分:4)
我怀疑你的path
值存在问题。我已经在这个主题上写了blogpost,因为WinRT异常可能非常不一致和误导。
我建议用两件事来帮助你了解事情:
StorageFile.Path
属性的值,并确保其中没有双\
,并且它确实指向ApplicationData.Current.LocalFolder
文件夹。FileIO.ReadBufferAsync
。你可能会得到一个更好的例外。另外,如果您已经拥有完整路径而不是操纵字符串,为什么不简单地调用StorageFile.GetFileFromPathAsync
?
答案 1 :(得分:0)
我的猜测是你在你想要删除的路径上留下一个斜线 - 你正在替换文件夹路径,而iirc不包括尾部斜杠。