Я пытаюсь использовать CfSetInSyncState с USN.
документация говорит, что вы можете предоставить USN, и изменение будет выполнено только тогда, когда USN все еще совпадает.
Однако вызов метода для файла NOT_IN_SYNC с текущим номером USN не увенчается успехом. Он возвращает 0x80070179
"ERROR_CLOUD_FILE_NOT_IN_SYNC". Возвращенное значение USN также не изменилось.
У меня есть минимальный образец на github, который продемонстрирует это.
Я пробовал разные флаги для получения дескриптора, а также вместо этого использовал метод CreateFile. Открытие файла также не меняет USN. Но пока я не знаю, я не смог установить SyncState, если был предоставлен USN, и я не смог получить текущий USN из функции.
Как я могу использовать CfSetInSyncState
таким образом, чтобы он устанавливал состояние IN_SYNC только тогда, когда USN не изменился.
Редактировать
Я обновил образец, поэтому он очистит потенциальные предыдущие файлы и сгенерирует некоторый вывод:
Cloud sample test!
Try Set In Sync
Created placeholder test1.txt with USN 1631131882568.
Try to set Sync state IN_SYNC
Faild to set InSyncState
USN was NOT changed.
Try Set NOT In Sync
Created placeholder test2.txt with USN 1631131882728.
setting USN variable to -1 But will still work for NOT_IN_SYNC.
Seting Sync state to NOT IN SYNC.
USN was changed now 0.
Я запускаю это в проекте AppPackage, так как это требование CfAPI.
Я ожидаю, что первый блок (установка не синхронизируемого файла для синхронизации) не завершится ошибкой, поскольку USN не изменился до вызова cfSetInSyncState
. (Это то, что сейчас меня блокирует)
Я также ожидал бы получить текущий USN, когда метод вернется, даже если он не удался. Но я не уверен в этом. В документации указано ...value after setting the in-sync state...
, которое я могу интерпретировать только в случае успеха.
Во втором блоке (синхронизация файла с несинхронизированным) я ожидаю получить текущий номер USN вместо 0.
В настоящее время я пробую разные подходы к открытию дескриптора файла, но пока ничего не помогло. Есть ли ошибка при регистрации SyncRoot, что для его работы должен быть установлен какой-то флаг?
CfSetInSyncState
устанавливаетCF_IN_SYNC_STATE_NOT_IN_SYNC
успех с установкойtmpUsn
на ноль. Если файл выходит,CfCreatePlaceholders
завершится ошибкой с ошибкой0x800700b7
(невозможно создать файл, когда файл уже существует). облачный файл запрещен.). Поэтому я не могу воспроизвести вашу проблему. Вы можете попробовать мои тесты или показать, как воспроизвести вашу проблему. - person Rita Han   schedule 24.03.2020I call a Method that does not what I wan/expectt
, похоже, связана с программированием. - person lokimidgard   schedule 24.03.2020