Как получить уведомление, когда StorageFile был изменен через OneDrive?
У меня есть базовое приложение UWP для Windows 10 (работающее на ПК), которое объявляет пользовательский формат файла. Пользователь может открывать и редактировать документы этого формата (например, открыть файл.docx в Word Mobile).
У меня такой вопрос: скажем, пользователь открывает документ из OneDrive с моим приложением, и документ изменяется на другом устройстве. Как мое приложение может получить уведомление об изменении для перезагрузки документа?
Бонусный вопрос:) Что если возникнет конфликт, когда файл был изменен локально и одновременно на другом устройстве?
Внутренне я использую StorageFile
что я получил от FileOpenPicker
читать документ.
Я смотрел в StorageFolder.CreateFileQueryWithOptions(...)
, но я не могу получить ссылку на родительскую папку StorageFile, потому что мое приложение имеет разрешение только на чтение самого файла, но не на доступ к родительской папке.
Я мог бы периодически опрашивать дату изменения файла, но это кажется далеко от идеала...
1 ответ
Я думаю, что это могло бы быть возможно с OneDrive API и веб-крючками
К сожалению, я не могу найти ни одного примера для UWP (есть только один для ASP.NET)
Вы также можете попробовать сделать это с событием ContentsChanged.
auto query = folder.CreateFileQuery();
query.ContentsChanged += queryContentsChanged;
.......
void queryContentsChanged(IStorageQueryResultBase sender, object args)
{
// check what was changed
}
Вы можете найти некоторую информацию здесь: Уведомления об изменении файловой системы в WinRT
Это должно работать и с OneDrive из-за концепции умных файлов. Как взято из этой статьи: Работа с файлами на локальном ПК и SkyDrive
Как разработчик, рассматривайте файлы SkyDrive как "просто файлы" - они используют тот же интерфейс StorageFile, что и любой другой файл в системе, и ими можно манипулировать практически так же.
Интеллектуальный файл - это файл, который отображается в системе как обычный файл, но содержит только метаданные и эскизы, а не полное содержимое файла. Содержимое файла находится на SkyDrive и может быть загружено по мере необходимости.