Как заблокировать открытый StorageFile, чтобы пользователь не мог переименовать его вне моего приложения?
У меня есть базовое приложение UWP, работающее на Windows 10 на рабочем столе. Приложение определяет пользовательский формат файла и позволяет пользователю открывать и редактировать документы.
Я использую FileOpenPicker
чтобы позволить пользователю выбрать файл.
У меня вопрос: как я могу предотвратить переименование / перемещение / удаление документа пользователем вне моего приложения (например, в проводнике Windows), когда он открыт в моем приложении?
Word Mobile блокирует открытые документы. Если я пытаюсь переименовать открытый документ в проводнике Windows, я получаю сообщение об ошибке:
"Действие не может быть завершено, потому что файл открыт в Runtime Broker. Закройте файл и попробуйте снова".
Я хочу добиться того же. Я подозреваю, что приложение Word Mobile открывает файл в специальном режиме или как-то блокирует его. Я пробовал различные Storagefile.OpenXXX()
методы, но не везет
// None of these seem to exclusively lock the file:
stream = await file.OpenStreamForWriteAsync();
stream = await file.OpenTransactedWriteAsync();
stream = await file.OpenAsync(FileAccessMode.ReadWrite);
stream = await file.OpenReadAsync();
1 ответ
Существует ShareMode, который вы можете установить для файлов, если вы установите для него значение "None", то никто другой не сможет открыть или изменить этот файл, пока вы держите его открытым:
new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);
Это использует System.IO, который должен быть доступен для вас. Полная документация здесь: https://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx
Это тебе поможет?
Я считаю, что это должен быть тот звонок, который вы ищете:
file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowOnlyReaders);
из:https://docs.microsoft.com/en-us/uwp/api/windows.storage.storageopenoptions?view=winrt-19041