Як заблокувати файл у Windows, не змінюючи його чи використовуючи сторонні інструменти?


24

Чи є спосіб заблокувати файл за допомогою бортових інструментів, щоб його не можна було видалити чи перезаписати?

Для тестування сценаріїв копіювання мені потрібно lock files temporarilyперевірити обробку помилок у скриптах. До XP я використовував завантаження файлу в debug.exe, щоб заблокувати його.

Чи існує спосіб у Windows 7 (і пізніших версіях)?

Редагувати
Я знаю, що це роблять програми. Моє питання, чи є вбудований механізм у windows. Іноді мені доводиться перевіряти сценарій на ПК і не хочу встановлювати нові програми для цього.

Edit2
Ось також хороші пропозиції: Як цілеспрямовано виключно заблокувати файл? , які, однак, потребують сторонніх інструментів або зміни файлу для блокування.


Чи працює трюк із блокнотом для вас?
nixda

1
@nixda Ні. Він перезаписує файл. Мені потрібно заблокувати даний файл, не змінюючи його.
marsh-wiggle

Розумію. Я відкликаю своє
закрите

Відповіді:


45

Я думаю, що PowerShell - це, мабуть, найновіший спосіб досягти цього. Щось таке:

#Specify the file name
$fileName = "C:\myfile.txt"

#Open the file in read only mode, without sharing (I.e., locked as requested)
$file = [System.io.File]::Open($fileName, 'Open', 'Read', 'None')

#Wait in the above (file locked) state until the user presses a key
Write-Host "Press any key to continue ..."
$null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

#Close the file (This releases the current handle and unlocks the file)
$file.Close()

Під час паузи вищезазначений скрипт викликає наступний підказку при спробі відкрити "myfile.txt":

введіть тут опис зображення


2
Чудово! Спасибі! На мій сором, я повинен зізнатися, що я розвивався в силі і не думав використовувати для цього класи .net. [Я сподіваюся, що далі не піде :-)]
marsh-wiggle

1
Гарна відповідь. Для цікавих, ось посилання MSDN до File::Openметоду деталізації параметрів виклику ( в Зокрема, останній аргумент, 'None', знімає з себе загальний доступ до файлу з будь-якими іншими потоками / процесами - і також, існують положення , щоб заблокувати файл тільки для читання / запису або їх поєднання).
Прорив

1
@moab Файл закритий і ручка відпущена в кінці.
День

2
Зверніть увагу, що $host.UI.RawUI.ReadKey(...)помилка PowerShell ISE не вдасться, оскільки ReadKey не реалізований для ISE. Обхід є [void](Read-Host 'Press Enter to continue'). Не точно так само, як користувач повинен натискати Enter, а не будь-яку клавішу. Однак досить добре для більшості цілей. Вирішення цього питання вийшло з цього повідомлення в блозі: jeffwouters.nl/index.php/2016/06/…
SimonTewsi

4

Оскільки мені не подобається встановлювати програмне забезпечення, яке я фактично не використовуватиму, я знайшов цю перлину VBScript:

Const ForAppending = 8
Set oFSO = CreateObject("Scripting.FileSystemObject")

Set f = oFSO.OpenTextFile("C:\Tst\My2.txt", ForAppending, True)

MsgBox "Press OK to unlock the file(s)"

Вся заслуга в Torgeir Bakken, повний пост ви можете побачити тут: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/


Приємно для тих, хто не любить powerhell, як рішення вище
-wiggle

0

Не можете ви позначити це лише для читання? Це ефективно "заблокує" файл, не дозволяючи його змінювати чи видаляти.

Команда attrib.exe доступна в командному рядку і дозволить вам встановити файл або каталог для читання. Більше інформації про цю команду можна знайти тут

І навпаки, ви можете зробити те ж саме через GUI, клацнувши правою кнопкою миші файл або каталог, який ви хочете позначити лише для читання, вибравши властивості та поставивши галочку лише для читання. Після натискання кнопки Застосувати / Ок застосовується нове налаштування до файлу чи каталогу.


3
Атрибут лише для читання запобігає лише модифікаціям, але не видаленню.
ComFreek

0

Чи не вдасться обмежити доступність файлу за допомогою вкладки «Безпека», клацнувши правою кнопкою миші та перейти до «Властивості» для файлу чи папки?

Якщо користувач має адміністраторський доступ до ПК, то це не дозволить йому видалити всі інші можливості робити щось із файлом / папкою?

Я маю визнати, коли я набираю, що мій робочий ПК все ще знаходиться на WinXP Pro, тому те, що я вже говорив вище, більше не може бути доступним - мені все ще не так зручно в моєму новому вікні Win 8.1 Pro, як я з ним років роботи з Win XP


Жоден із доступних дозволів NTFS не імітує поведінку заблокованого файлу. Найближчим було б зробити файл лише для читання, але ми можемо бути впевнені, що ОП знає про цей варіант і просить заблокувати файл з поважної причини.
Я кажу: Відновіть Моніку

-2

У деяких сценаріях створення нової папки з ім'ям файлу може зробити цю роботу. (Тобто виникає помилка при спробі відкрити файл).


Це справді коментар, а не відповідь на початкове запитання.
DavidPostill

Для мене це відповідь у завданні, яка вела мене на цю сторінку. Через таких людей, як ти, хтось не знайде це у своєму подібному завданні.
noonex

3
OP запитував, як заблокувати наявний файл . Створення папки з однаковою назвою неможливо. "Підкаталог або файл xxx вже існує", тому ваша відповідь не застосовується до проблеми в питанні.
DavidPostill

У багатьох випадках потрібно "заблокувати існуючий файл", щоб переконатися, що програма отримає помилку при спробі змінити або відкрити його. Я справді перестаю пояснювати очевидні речі - приємного дня, сер.
noonex
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.