UWP StorageFile.CopyAsync() Throwing Error: "Value does not fall within the expected range."

UWP StorageFile.CopyAsync() Throwing Error: "Value does not fall within the expected range."

我正在尝试用 AppData 子目录中的新版本覆盖文件。

当前流程是用户必须select 覆盖文件,以及它所在的文件夹目录,以便我可以将它们添加到未来的访问列表中。稍后用户可以从一组图像中 select ,此时它需要复制并覆盖目标文件。我尝试执行此操作的代码如下:

// lets try to copy file to wallpaper default location.
ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
var faToken = localSettings.Values["WallpaperStorageFileFAToken"] as string;
var faTokenFolder = localSettings.Values["WallpaperStorageFolderFAToken"] as string;

var destinationFile = await LoadExistingFileSelection(faToken);
var destinationFolder = await LoadExistingFolderSelection(faTokenFolder);

StorageFile movedFile = null;
try
{
    movedFile = await imageFile.CopyAsync(destinationFolder, destinationFile.Name, NameCollisionOption.ReplaceExisting);
}
catch (Exception genEx)
{
    //
}

Fa 令牌是在用户使用 FileOpenPicker 获得 StorageFileFolderPicker 用于获得 StorageFolder 之后获取的目标目录。

LoadExistingFolderSelection 和 LoadExistingFileSelection 使用以下代码获取 StorageFilesStorageFolder

await StorageApplicationPermissions.FutureAccessList.GetFileAsync(faToken);

await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(faFolderToken);

问题是这一行:

imageFile.CopyAsync(destinationFolder, destinationFile.Name, NameCollisionOption.ReplaceExisting);

引发此错误:

"Value does not fall within the expected range."

仅此而已,没有别的,任何想法都会很棒。

反斜杠...老实说,这是您开发职业生涯中的那些时刻之一,您只是坐在那里叹息,因为它太愚蠢了。

所以我可以愉快地检索我想完全复制到 StorageFile 对象中的图像,其路径包含 1 个额外的反斜杠,Windows OS 文件资源管理器不会惊呆了。

目前没问题,继续 运行 复制操作,然后突然得到

“Value does not fall within the expected range.”

异常,可以说是我见过的与文件路径问题相关的最无用的异常之一。

所以你有它,反斜杠,真的仔细检查路径 属性。事后看来。通常我会删除那个问题,因为这个答案并不是什么特别好的启示。但我认为它可以作为对可怕的 反斜杠 和 UWP 的存储 API.

的警告