运行程序时出现文件创建错误,但是如果我使用调试器逐步执行该程序,则会在数据文件夹中复制并创建该文件。以下是错误信息。
//当该文件已存在时无法创建文件。 (HRESULT异常:0x800700B7)
这是代码。
private string dbName1 = "ExpressEMR.db";
public MainPage()
{
this.InitializeComponent();
LoadDataTask();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
private async void LoadDataTask()
{
await CreateIfNotExists(dbName1);
}
private async Task CreateIfNotExists(string dbName1)
{
if (await GetIfFileExistsAsync(dbName1) == null)
{
StorageFile seedFile = await StorageFile.GetFileFromPathAsync(Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, dbName1));
await seedFile.CopyAsync(Windows.Storage.ApplicationData.Current.LocalFolder);
}
}
private async Task<StorageFile> GetIfFileExistsAsync(string key)
{
try
{
return await ApplicationData.Current.LocalFolder.GetFileAsync(key);
}
catch (FileNotFoundException)
{
return default(StorageFile);
}
}
答案 0 :(得分:0)
您应该考虑从构造函数中移除支持异常的代码。 请考虑提供this.Loaded事件,以便在应用程序加载状态之前首先完成构造函数。
public MainPage()
{ {
this.InitializeComponent();
this.Loaded += async (se, ev) =>
{
LoadDataTask();
};
}
此外,LoadDataTask应该返回一个Task而不是Void。
private async TaskLoadDataTask()
{
await CreateIfNotExists(dbName1);
}
private async Task CreateIfNotExists(string dbName1)
{
var fileExists = await GetIfFileExistsAsync(dbName1) != null;
if (!fileExists)
{
var filePath = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, dbName1);
var seedFile = await StorageFile.GetFileFromPathAsync(filePath);
await seedFile.CopyAsync(Windows.Storage.ApplicationData.Current.LocalFolder);
}
}
最后,您似乎在两个不同的位置搜索:
Windows.ApplicationModel.Package.Current.InstalledLocation.Path
和
ApplicationData.Current.LocalFolder
这些路径真的相同吗?