C# 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

为什么在UWP上保存文件经常失败

当应用程序最初启动时(在
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);
}
My
OnSuspending
方法:

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
正在处理该文件,而您正在尝试对其执行其他操作,则可能会引发异常。该文件在即将保存时不应被使用。在构建发布版本时,问题可能会自行解决,我必须检查这一点。