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


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.