Як цілеспрямовано виключно заблокувати файл?


87

Я хочу тримати ексклюзивний замок у файлі, щоб він не міг прочитати чи записати щось інше. Чи є простий інструмент або команда Windows для цього?

Я припускаю, що інструмент чи утиліта реалізували б функцію LockFileEx Windows.

Примітка . Я спробував текстові редактори, такі як Блокнот і Блокнот ++ у текстовому файлі, але вони не мають ексклюзивного блокування.


Чому б просто не зробити один? Також, як довго вони повинні тримати замок? Чи повинні вони чекати якоїсь події?
— Мехрдад

6
Я розглядав програмування, але вважав, що я можу використовувати швидкий інструмент, редактор або команду. На суперусері далеко не всі користувачі є програмістами. bit.ly/lXT6ey Я не хотів їхати по маршруту Stackoverflow із цим питанням. Я тестую поведінку програми, коли вона не може отримати доступ до файлів.
— Джон К

Я можу зробити це для вас - просто дайте знати, коли слід зняти замок.
— Мехрдад

дивіться також моє схоже запитання superuser.com/questions/519389/flock-command-for-windows
— eadmaster

Мабуть, такі редактори, як "Блокнот" і "Блокнот ++", навіть не зберігають файл не виключно.
— Іван

Відповіді:


23

Спробуйте Easy File Locker (безкоштовно).

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


Не працює в Windows 2003
— Ерік Боннот

14
Ця програма не відображає файлів "Блокування" настільки, що змінює дозвіл на файл. Це важлива відмінність, якщо ви намагаєтеся перевірити, як ваша програма обробляє файли, які активно відкриваються / блокуються іншою програмою. У моєму випадку ця програма не працювала. Тут слід відповісти на рішення «блокнот> файл».
— javajavajaваваява

1
НЕ ПРАЦЮЄ В Windows 10. І не можна встановити. Обережно !!
— Шахар Пріш

Цей додаток спричинив декілька збоїв синього екрану в Windows 10. Цей додаток також призначений для створення недоступних файлів за допомогою змін дозволу, а не блокування файлів процесами. Використання FileLocker з відповіді @ RRKbabxW3 спрацювало чудово.
— Джордан Мак

Переходить на синій екран смерті в Windows 10.
— Гупта,

137

Більш просте рішення: У каталозі, що цікавить, запустіть з рядка cmd:

notepad >filetolock

У разі повторної спрямованості вимкнення вона залишатиметься заблокованою, поки додаток (блокнот) не буде припинено.

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


38
використовуйте перенаправлення на додавання замість того, щоб тепер перезаписати filetolock:notepad >>filetolock
— eadmaster

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

26

Відкрийте його за допомогою MS-Excel ... ця програма блокує файл під час відкриття.


10
І я вважав, що Excel був корисний раніше!
— Скотт Стаффорд

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
Це працювало для мене там, де інших рішень не було
— каулінатор

2
Зауважте, що в Windows 10 його потрібно запустити як адміністратор.
— ковбасник

4

Я не можу писати коментарі, тому я додаю свою інформацію таким чином:

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

EDIT: підсумок іншого питання:

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

  • MS-програми, такі як блокування word або excel (працює і для текстових файлів)

  • Програматично використовувати LockFileEx(Windows API) з LOCKFILE_EXCLUSIVE_LOCKтаLOCKFILE_FAIL_IMMEDIATELY


1

Ось як я повторюю поведінку користувача заблокованого файлу для перевірки помилок.

Dim s як новий 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 і натисніть клавішу Enter, і папка буде заблокована.

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


2
Це працює лише на папках, і ще гірше, вона перейменовує папку. Це зовсім не буде.
— Twisty Impersonator
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.