Как целенаправленно заблокировать файл?


87

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

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

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


Почему бы просто не сделать один? Кроме того, как долго они должны держать замок? Должны ли они ждать какого-то события?
Мердад

6
Я подумал о программировании, но решил, что есть быстрый инструмент, редактор или команда, которую я могу использовать. На суперпользователе не все пользователи являются программистами. bit.ly/lXT6ey Я не хотел идти по пути Stackoverflow с этим вопросом. Тестирую поведение приложения, когда оно не может получить доступ к файлам.
Джон К

Я мог бы сделать один для вас - просто позвольте мне знать, когда замок должен быть снят.
Мердад

см. также мой аналогичный вопрос superuser.com/questions/519389/flock-command-for-windows
eadmaster 18.12.12

Очевидно, что редакторы, такие как Notepad и Notepad ++, даже не оставляют файл открытым не только.
Джон

Ответы:


23

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

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


Не работает на Windows 2003
Эрик Бонно,

14
Это приложение не «блокирует» файлы, а лишь изменяет права доступа к файлу. Это важное различие, если вы пытаетесь проверить, как ваше приложение обрабатывает файлы, которые активно открываются / блокируются другим приложением. В моем случае это приложение не работало. Решение 'notepad> file' должно быть ответом здесь.
javajavajavajavajava

1
НЕ РАБОТАЕТ НА Windows 10. И не удаляется. Осторожно !!
Шахар Приш

Это приложение вызвало множество сбоев синего экрана в Windows 10. Это приложение также предназначено для создания недоступных файлов путем изменения разрешений, а не блокировки файлов процессами. Использование FileLocker из @ RRKbabxW3 ответ работал отлично.
Джордан Мак

Переходит к синему экрану смерти на Windows 10.
Гупта

138

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

notepad >filetolock

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

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


38
вместо этого используйте команду notepad >>filetolock
addnd

5
очень полезное решение, не нужно ничего устанавливать
Aprillion

5
Это гораздо лучшее решение, чем скачивание большего количества бесплатных программ.
BenCr

9
Все еще работает на Windows 10. Должен быть принятый ответ
SoonDead

8
По какой-то причине это должно быть выполнено в cmd.exe. Это не работает в PowerShell. Файл создан и блокнот открыт, но вы все равно можете удалить файл, несмотря на то, что блокнот открыт. Я проверил это как на Windows Server 2012, так и на Windows 10.
Вилле Салонен,

32

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

Этот скрипт 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()

2
Я нашел это как единственное рабочее решение. Методы «Блокнот» и «EasyFileLocker» не блокируют файл полностью и могут быть скопированы (протестировано в Windows 10)
HypeZ

Для Powershell ISE использование [void](Read-Host 'Press Enter to continue')вместо $host.UI.RawUI.ReadKey(...)ReadKey не поддерживается в псевдо-консоли в Powershell ISE.
SimonTewsi


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.

1
Это сработало для меня, где другие решения не сработали
cowlinator

2
Обратите внимание, что в Windows 10 он должен запускаться от имени администратора.
Cowlinator

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

Я второй решение по болотной шевелению. Вот моя версия сценария:

# This is lock_file.ps1
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$False)]
  [string]$my_file_path
)
if (!$my_file_path){
   Write-Host "Parameter my_file_path is missing, quitting."
   [Environment]::Exit(1)
}
$my_file_exists = Test-Path $my_file_path -pathType Leaf
If ($my_file_exists) {
   #Open the file in read only mode, without sharing (I.e., locked as requested)
   $my_open_file = [System.io.File]::Open($my_file_path, '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
   $my_open_file.Close()
} else {
   Write-Host "Parameter mismatch, file doesn't exist." 
}

Вы можете вызвать это из cmd так:

powershell -ExecutionPolicy Unrestricted -file lock_file.ps1 "path\to\file_to_lock.txt"

0

Для тестирования Robocopy ERROR «доступ запрещен» я просто удалил доступ для чтения для пользователя. Будет ли это работать?

Для Windows 10 это может быть легко сделано из командной строки

chmod 'ur' lockfile

Для Windows 7 вы можете использовать свойства безопасности проводника.


-2

Замените «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 и нажмите ввод, и папка будет заблокирована.

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


2
Это работает только для папок и, что еще хуже, переименовывает папку. Это не будет делать вообще.
Twisty Impersonator
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.