C# UWP文件管理
为什么在UWP上保存文件经常失败 当应用程序最初启动时(在C# UWP文件管理,c#,file,uwp,save,load,C#,File,Uwp,Save,Load,为什么在UWP上保存文件经常失败 当应用程序最初启动时(在BackgroundWorker的帮助下),我打开并读取指定文件的内容。然后,当应用程序挂起时,我尝试将新内容保存到同一文件中,但这几乎总是导致以下异常: 无法删除要替换的文件。(来自HRESULT的异常:0x80070497) 我的加载方式: private async static void SymbolLoader_DoWork(object sender, DoWorkEventArgs e) { IStorage
BackgroundWorker
的帮助下),我打开并读取指定文件的内容。然后,当应用程序挂起时,我尝试将新内容保存到同一文件中,但这几乎总是导致以下异常:
无法删除要替换的文件。(来自HRESULT的异常:0x80070497)
我的加载方式:
private async static void SymbolLoader_DoWork(object sender, DoWorkEventArgs e)
{
IStorageItem file = null;
if (!UseDefault)
{
var folder = await StorageFolder.GetFolderFromPathAsync(SavePath);
file = await folder.TryGetItemAsync(FileName);
}
if (file == null)
{
file = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\Default.txt");
}
var text = await FileIO.ReadTextAsync((IStorageFile)file);
Data = DoSomething(text);
}
MyOnSuspending
方法:
private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var tries = 0;
var maxTries = 10;
var deferral = e.SuspendingOperation.GetDeferral();
while (tries < maxTries)
{
var completed = await Saver.Save();
if (completed)
break;
else
{
tries++;
await Task.Delay(TimeSpan.FromSeconds(0.1));
}
}
deferral.Complete();
}
public static async Task<bool> Save()
{
//some formatting etc.
var folder = await StorageFolder.GetFolderFromPathAsync(SavePath);
var file = await folder.CreateFileAsync(FileName, CreationCollisionOption.ReplaceExisting);
try
{
await FileIO.WriteLinesAsync(file, lines);
return true;
}
catch(Exception e)
{
return false;
}
}
保存数据是至关重要的,这就是为什么我通过多次延迟保存文件来“解决”问题的原因。然而,我的解决方案(在OnSuspending
方法中)似乎不是正确的方法
正确的方法是什么?提前谢谢 调用
文件夹.CreateFileAsync
时,您是否尝试过使用CreationCollisionOption.OpenIfExists
而不是ReplaceExisting
?您的解决方案似乎工作得更好,但偶尔仍会引发相同的异常。这取决于您对该文件的处理方式。如果您的BackgroundWorker
正在处理该文件,而您正在尝试对其执行其他操作,则可能会引发异常。该文件在即将保存时不应被使用。在构建发布版本时,问题可能会自行解决,我必须检查这一点。