80

Я хочу сохранить исключительную блокировку файла, чтобы он не мог быть прочитан или записан ничем другим. Есть ли простой инструмент или команда Windows для этого?

Я предполагаю, что инструмент или утилита реализуют функцию Windows LockFileEx .

Примечание . Я пробовал текстовые редакторы, такие как «Блокнот» и «Блокнот ++», для текстового файла, но они не имеют исключительной блокировки.

8 ответов8

122

Более простое решение: в интересующем каталоге запустите строку cmd:

notepad >filetolock

Как перенаправленный стандартный вывод, он останется заблокированным, пока приложение (блокнот) не будет завершено.

Обратите внимание, что "filetolock" будет перезаписан перенаправлением, так что вы, вероятно, не хотите использовать существующий файл какой-либо важности. Пустое "filetolock" не будет иметь значения для приложения, которое вы пытаетесь протестировать, так как приложение все равно не сможет его открыть.

29

Блокировка файла без сторонних инструментов, нет изменений в заблокированном файле, и файл даже не может быть скопирован

Этот скрипт 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
$file.Close()
25

Откройте его с помощью MS-Excel ... это приложение блокирует файл при открытии.

21

Попробуйте Easy File Locker (бесплатно).

11

FileLocker - это бесплатный инструмент командной строки с открытым исходным кодом.

Использование:

FileLocker [/T LockTime] [/I] [/K] [/Q] file [file...]

/T LockTime     Time in milliseconds to lock the file
/I              Infinite locking until process is killed (default)
/K              Lock file until key is pressed
/Q              Be quiet.
4

Я не могу писать комментарии, поэтому я добавляю свою информацию следующим образом:

https://stackoverflow.com/questions/5860542/how-can-i-simulate-a-locked-file-one-which-has-a-write-lock

РЕДАКТИРОВАТЬ: краткое изложение другого вопроса:

  • команда паузы: ( >&2 pause ) >> file2lock.txt

  • MS программы, такие как Word или Excel блокировки (работает для текстовых файлов)

  • Программно использовать LockFileEx (Windows API) с LOCKFILE_EXCLUSIVE_LOCK и LOCKFILE_FAIL_IMMEDIATELY

1

Вот как я повторяю поведение пользователя заблокированного файла для тестирования ошибок.

Dim s As New StreamReader("C:\test\sampleFile.txt")

Я добавляю эту строку в свой модульный тест, чтобы заблокировать файл, а затем запускаю тест в режиме отладки, чтобы воспроизвести плохое поведение, когда данный файл заблокирован.

Я до сих пор не знаю, как мои бизнес-пользователи блокируют данный файл. Как вы сказали, блокнот не может заблокировать его исключительно.

К счастью, объявление потокового считывателя блокирует файл исключительно, если не указано иное.

-1

Замените «Your-Password-Here» на ваш пароль и сохраните этот скрипт как Locker.bat

*cls
@ECHO OFF
title Folder Locker
if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" goto UNLOCK
if NOT EXIST Locker goto MDLOCKER
:CONFIRM
echo Are you sure u want to Lock the folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Invalid choice.
goto CONFIRM
:LOCK
ren Locker "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
echo Folder locked
goto End
:UNLOCK
echo Enter password to Unlock folder
set/p "pass=>"
if NOT %pass%==Your-Password-Here goto FAIL
attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
ren "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" Locker
echo Folder Unlocked successfully
goto End
:FAIL
echo Invalid password
goto end
:MDLOCKER
md Locker
echo Locker created successfully
goto End
:End*

Когда вы запустите пакетный файл, он выдаст вам приглашение «Вы уверены, что хотите заблокировать папку (Y/N)»; введите Y и нажмите ввод, и папка будет заблокирована.

Запустите пакетный файл еще раз, введите свой пароль и папку, и все ваши файлы будут снова разблокированы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .