【发布时间】:2017-07-01 19:28:56
【问题描述】:
基本上,以下代码会将整个文件夹从应用安装复制到 LocalCacheFolder,以便对其进行操作/更新。在这种情况下,名为“Data”的文件夹的内容
此代码在开发模式下的移动设备、桌面和 Xbox 上运行良好,但在零售模式下的 Xbox 上此行失败:
await file.CopyAsync(destinationFolder, file.Name, NameCollisionOption.FailIfExists);
这也是全新安装,所以我知道文件不存在。
在零售模式下是否有不同的方法来实现这一点,尽管理论上所有 UWP 代码都应该跨设备工作。
private async Task setupdatabase()
{
StorageFolder destinationContainer = Windows.Storage.ApplicationData.Current.LocalCacheFolder;
string root = Windows.ApplicationModel.Package.Current.InstalledLocation.Path;
string path = root + @"\Data";
StorageFolder sfolder = await StorageFolder.GetFolderFromPathAsync(path);
await CopyFolderAsync(sfolder, destinationContainer);
}
public static async Task CopyFolderAsync(StorageFolder source, StorageFolder destinationContainer, string desiredName = null)
{
StorageFolder destinationFolder = null;
destinationFolder = await destinationContainer.CreateFolderAsync(desiredName ?? source.Name, CreationCollisionOption.OpenIfExists);
foreach (var file in await source.GetFilesAsync())
{
await file.CopyAsync(destinationFolder, file.Name, NameCollisionOption.FailIfExists);
}
foreach (var folder in await source.GetFoldersAsync())
{
await CopyFolderAsync(folder, destinationFolder);
}
}
【问题讨论】:
-
失败怎么办?它会抛出异常还是什么?
-
这就是问题所在,因为它只在零售模式下失败,无法连接调试器来查看发生了什么。我必须进行编辑、提交到商店、等待认证、安装在零售盒上并再次经历整个耗时的过程。我在屏幕上放置了一个文本框并在每个命令之后更新了它的值,所以我知道它在哪里不再工作并尝试使用 try{}catch(Exception e){} 块捕获任何异常,但它只是跳过了 catch 中的代码