同步正在使用的文件
本文关键字:文件 同步 | 更新日期: 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
进行读/写。