在我的应用中,我使用OneDrive来保持数据同步。我成功地将文件写入OneDrive,但是没有运气用新的OneDrive数据替换本地过时的数据。
我的当前方法在不抛出异常的情况下完成,并不返回OneDrive上的文件所包含的相同文本数据。 该方法的目标是将datemodified与OneDrive文件与本地文件进行比较,如果OneDrive更新,则将OndeDrive文件的内容写入本地StorageFile,然后将其返回以进行反序列化。
private async Task<string> GetSavedDataFileAsync(string filename)
{
string filepath = _appFolder + @"\" + KOWGame + @"\" + filename;
StorageFile localread;
BasicProperties localprops = null;
string txt;
try
{
localread = await local.GetFileAsync(filepath);
localprops = await localread.GetBasicPropertiesAsync();
}
catch (FileNotFoundException)
{ localread = null; }
if (_userDrive != null)
{
if (_userDrive.IsAuthenticated)
{
try
{
Item item = await _userDrive.Drive.Special.AppRoot.ItemWithPath(filepath).Request().GetAsync();
if (item != null)
{
DateTimeOffset drivemodified = (DateTimeOffset)item.FileSystemInfo.LastModifiedDateTime;
if (localprops != null)
{
if (drivemodified > localprops.DateModified)
{
Stream stream = await localread.OpenStreamForWriteAsync();
using (stream)
{ await _userDrive.Drive.Special.AppRoot.ItemWithPath(filepath).Request().GetAsync(); }
}
}
}
}
catch (OneDriveException e)
{
if (e.IsMatch(OneDriveErrorCode.ActivityLimitReached.ToString()))
{ string stop; }
}
}
}
if (localread == null) return string.Empty;
txt = await FileIO.ReadTextAsync(localread);
return txt;
}
我试图反向设计我在Stack上找到的关于将StorageFile写入OneDrive的另一个答案,因为我需要打开本地文件的流,但我似乎没有正常工作。
答案 0 :(得分:3)
要获取OneDrive项目的内容,我们需要使用以下方法:
var contentStream = await _userDrive.Drive.Special.AppRoot.ItemWithPath(filepath).Content.Request().GetAsync();
使用
时await _userDrive.Drive.Special.AppRoot.ItemWithPath(filepath).Request().GetAsync();
您的OneDrive Item
不是其内容。
因此,您可以像下面这样更改代码,将Onedrive项目的内容写入本地文件:
if (drivemodified > localprops.DateModified)
{
using (var stream = await localread.OpenStreamForWriteAsync())
{
using (var contentStream = await _userDrive.Drive.Special.AppRoot.ItemWithPath(filepath).Content.Request().GetAsync())
{
contentStream.CopyTo(stream);
}
}
}