Я пытаюсь использовать CfSetInSyncState с USN.
В документации говорится, что вы можете указать USN, и изменение будет выполнено только тогда, когда USN все еще совпадает.
Однако вызов метода для файла NOT_IN_SYN C с текущим номером USN не будет успешным. Возвращается 0x80070179
«ERROR_CLOUD_FILE_NOT_IN_SYN C». Возвращенное значение USN также не изменилось.
У меня есть минимальный пример на github , который продемонстрирует это.
Я пробовал разные флаги для получения дескриптора, а также вместо этого использовал метод CreateFile. Открытие файла также, похоже, не меняет USN. Но до тех пор, пока я не узнал, что я не смог установить SyncState, если был указан USN, и не смог получить текущий USN из функции.
Как я могу использовать CfSetInSyncState
таким образом, чтобы он только устанавливал состояние в IN_SYN C, когда USN не изменился.
Edit
Я обновил образец, чтобы он очистил потенциальные предыдущие файлы и сгенерировал некоторые выходные данные:
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.
Я ожидаю, что первый блок (установив для файла non syn c syn c) будет не сбой, так как USN не изменился до вызова cfSetInSyncState
. (Это то, что в настоящее время блокирует меня)
Я также ожидал бы получить текущий USN при возврате метода, даже если он не удался. Но я не уверен в этом. В документации написано ...value after setting the in-sync state...
, которое я могу интерпретировать только в случае успеха.
Во втором блоке (файл syn c не синхронизирован) я ожидал бы получить текущий USN вместо 0.
В настоящее время я пробую разные подходы при открытии дескриптора файла, но пока ничего не помогло. Есть ли ошибка при регистрации Syn cRoot, что для его работы должен быть установлен какой-либо флаг?