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

C# 为什么在尝试删除文件时出现参数异常?,c#,windows-runtime,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 (Fil

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

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

 }
当运行文件.deleteAync时;给出ArgumentException,消息值不在预期范围内

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

调用堆栈:

在Windows.Storage.StorageFile.DeleteAsync 在Lightning.Services.DownloaderService.d_u36.MoveNext中的e:\\Services\DownloaderService.cs:第120行


第120行是DeleteAsync行。

我猜您在试图删除的路径前面留了一条斜线-您正在替换文件夹路径,iirc不包括尾部斜线。

我猜您在试图删除的路径前面留了一条斜线-您正在替换文件夹路径,哪个iirc不包括尾随斜杠。

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

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

检查StorageFile.Path属性的值,确保其中没有double\并且它确实指向ApplicationData.Current.LocalFolder文件夹。 尝试用相同的路径呼叫。你可能会得到一个更好的例外。
另外,如果您已经拥有完整路径,为什么不直接调用而不是操纵字符串呢?

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

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

检查StorageFile.Path属性的值,确保其中没有double\并且它确实指向ApplicationData.Current.LocalFolder文件夹。 尝试用相同的路径呼叫。你可能会得到一个更好的例外。
还有,如果你已经有完整的路径,为什么不直接调用而不是操纵字符串呢?

你可以先调试,捕捉异常,调用ToString来捕捉它的真实细节,然后你的问题是添加这个非常重要但奇怪地缺少的信息。嗯,我做了调试,这就是我如何知道导致异常的行、抛出的异常以及异常的消息。没有内部异常。在问题中添加了堆栈,这就是它给我的所有堆栈跟踪。这是一个强大的浅堆栈:/。看来没有什么不对劲。因此,什么都不要假设!例如,没有内部异常,这就是为什么您应该始终触发异常并发布整个事件,或者您的文件名是正确的。虽然GetFileAsync会出现错误的文件名,但这里的问题还是假设。也许您应该在调用delete之前检查文件的状态,看看是否有任何东西表明存在问题。验证路径是否正确,或使用其他重载。还有ToString。除此之外,只需反编译DeleteAsync。我不做任何假设。file变量正确地保存了我告诉它打开的文件的详细信息,实际上没有内部异常,因为我可以在异常中看到它,它在调试时正在中断,并且只有两个重载,它们都会引发该异常。您可以首先通过调试开始,捕获异常,调用ToString来捕捉它的真实细节,然后你的问题是添加这个非常重要但奇怪地缺少的信息。嗯,我进行了调试,这就是我如何知道导致异常的行、引发的异常以及异常的消息。没有内部异常。在问题中添加了堆栈,这就是它给我的所有堆栈跟踪。这是一个强大的浅堆栈:/。看来没有什么不对劲。因此,什么都不要假设!例如,没有内部异常,这就是为什么您应该始终触发异常并发布整个事件,或者您的文件名是正确的。虽然GetFileAsync会出现错误的文件名,但这里的问题还是假设。也许您应该在调用delete之前检查文件的状态,看看是否有任何东西表明存在问题。验证路径是否正确,或使用其他重载。还有ToString。除此之外,只需反编译DeleteAsync。我不做任何假设。file变量正确地保存了我告诉它要打开的文件的详细信息,实际上没有内部异常,因为我可以在异常中看到它,它在调试时正在中断,并且只有两个重载,它们都会引发该异常。您关于预加的路径是正确的,但是删除预加的斜杠没有帮助。另外,delete方法对我提供的路径没有任何作用,它是在删除它正在加载的文件。关于路径前缀,您是正确的,但是删除前缀斜杠没有帮助。此外,delete方法不支持
我不能对我提供的路径做任何事情,它正在删除它正在加载的文件。我将在周一对此进行一次尝试,尽管我认为由于StorageFile读取了该文件,它知道它的mime类型,因此可以很好地找到该文件。我想这是一个很糟糕的假设,尽管我认为如果是这样的话,WinRT就是一个糟糕的API。另外,我不知道StorageFile.GetFileFromPathAsync,我发现的大多数资源都是先加载文件夹的。我也会尝试使用它。我会在周一试一试,不过我认为,由于StorageFile读取了该文件,它知道它的mime类型,因此可以很好地找到该文件。我想这是一个很糟糕的假设,尽管我认为如果是这样的话,WinRT就是一个糟糕的API。另外,我不知道StorageFile.GetFileFromPathAsync,我发现的大多数资源都是先加载文件夹的。我也会尝试使用它。