同步正在使用的文件

本文关键字:文件 同步 | 更新日期: 2023-09-27 17:49:31

我想在数据库管理器程序中使用自动同步功能。如果数据库文件被更改,自动同步会自动上传到云端。

我的问题是,数据库总是使用数据库文件,而上传方法无法访问该文件

代码:

文件名为main.db

using in insert和BackgroundUploadAsync方法

  public static async void InsertToDatabase(object data)
        {
            SQLiteAsyncConnection conn = new SQLiteAsyncConnection("Main.db");
            await conn.InsertAsync(data);//i cant close the file in async methode
        }
  public async static void AutoSync()
{
....
if (file != null)
                    {
                        var progressHandler = new Progress<LiveOperationProgress>(
                            (progress) => { /*pr.Value = progress.ProgressPercentage;*/ });
                        SettingsFlyout1.ctsUpload = new System.Threading.CancellationTokenSource();
                        LiveConnectClient liveClient = new LiveConnectClient(app.Session);
                        await liveClient.BackgroundUploadAsync(result, file.Name, file, OverwriteOption.Overwrite, SettingsFlyout1.ctsUpload.Token, progressHandler);
                    }
}

private async void Button_Click(object sender, RoutedEventArgs e)
        {
    InsertToDatabase(adat);
    AutoSync();//file not found exception,
    }

感谢您的帮助或任何建议!

同步正在使用的文件

这可能不是理想的空间选择,但是您可以创建两个数据库文件。一个in-use,一个at-rest

每次写入(或一组写入)之后,在向DB写入任何其他条目之前,将in-use复制到at-rest上。您可能需要断开连接,然后在复制后重新连接。这应该是一个相当快的操作(比上传快得多)。

然后,当您需要上传时,从at-rest版本流式传输。

您将需要对at-rest的读/写进行锁定,但至少您可以在不受互联网连接限制的情况下对in-use进行读/写。