Jak celowo zablokować plik wyłącznie?

87

Chcę trzymać wyłączną blokadę pliku, aby nie mógł być odczytany ani zapisany przez nic innego. Czy istnieje proste narzędzie lub polecenie systemu Windows, aby to zrobić?

Podejrzewam, że narzędzie lub narzędzie implementuje funkcję Windows LockFileEx .

Uwaga : próbowałem edytorów tekstu, takich jak Notepad i Notepad ++, na pliku tekstowym, ale nie posiadają one wyłącznej blokady.

John K.
źródło
Dlaczego nie po prostu go stworzyć? Ponadto, jak długo powinni trzymać zamek? Czy powinni poczekać na jakieś wydarzenie?
Mehrdad
6
Rozważałem zaprogramowanie jednego, ale pomyślałem, że istnieje szybkie narzędzie, edytor lub polecenie, którego mogę użyć. Na superużytkowniku nie wszyscy użytkownicy są programistami. bit.ly/lXT6ey Nie chciałem pójść drogą Stackoverflow z tym pytaniem. Testuję zachowanie aplikacji, gdy nie ma ona dostępu do plików.
John K,
Być może uda mi się zrobić jeden dla ciebie - po prostu daj mi znać, kiedy zamek powinien zostać zwolniony.
Mehrdad
zobacz także moje podobne pytanie superuser.com/questions/519389/flock-command-for-windows
eadmaster
Najwyraźniej edytory takie jak Notepad i Notepad ++ nawet nie utrzymują otwartego pliku nie wyłącznie.
John

Odpowiedzi:

23

Wypróbuj Easy File Locker (darmowy).

wprowadź opis zdjęcia tutaj

David
źródło
Nie działa w systemie Windows 2003
Eric Bonnot
14
Ta aplikacja nie „blokuje” plików, lecz zmienia uprawnienia do pliku. Jest to ważne rozróżnienie, jeśli próbujesz przetestować, jak aplikacja obsługuje pliki otwierane / blokowane przez inną aplikację. W moim przypadku ta aplikacja nie działała. Rozwiązaniem powinno być rozwiązanie „notatnik> plik”.
javajavajavajavajava
1
NIE DZIAŁA W SYSTEMIE Windows 10. I nie można go odinstalować. Strzec się!!
Shahar Prish,
Ta aplikacja spowodowała wiele awarii niebieskiego ekranu w systemie Windows 10. Ta aplikacja jest również przeznaczona do tworzenia niedostępnych plików poprzez zmiany uprawnień, a nie blokowanie plików przez procesy. Korzystanie z FileLocker z @ RRKbabxW3 odpowiedź działała idealnie.
Jordan Mack
Przechodzi do niebieskiego ekranu śmierci w systemie Windows 10.
Gupta
137

Prostsze rozwiązanie: w katalogu zainteresowania uruchom z linii cmd:

notepad >filetolock

Jako stdout po przekierowaniu pozostanie zablokowany, dopóki aplikacja (notatnik) nie zostanie zakończona.

Pamiętaj, że „filetolock” zostanie zastąpiony przez przekierowanie, więc prawdopodobnie nie chcesz używać istniejącego pliku o dowolnym znaczeniu. Pusty „filetolock” nie będzie miał znaczenia dla aplikacji, którą próbujesz przetestować, ponieważ aplikacja i tak nie będzie mogła go otworzyć.

użytkownik257114
źródło
38
zamiast tego użyj append przekierowania, aby teraz zastąpić filetolock:notepad >>filetolock
eadmaster
5
bardzo przydatne rozwiązanie, nie trzeba niczego instalować
Aprillion
5
Jest to znacznie lepsze rozwiązanie niż pobieranie większej ilości darmowego oprogramowania.
BenCr
9
Nadal działa w systemie Windows 10. Powinna być zaakceptowana odpowiedź
SoonDead
8
Z jakiegoś powodu musi to zostać wykonane w cmd.exe. Nie działa w PowerShell. Plik zostanie utworzony, a notatnik otwarty, ale nadal można go usunąć, mimo że notatnik jest otwarty. Testowałem to zarówno na Windows Server 2012, jak i Windows 10.
Ville Salonen
32

Zablokuj plik bez narzędzi innych firm , żadnych zmian w pliku, który jest blokowany, a pliku nie można nawet skopiować

Ten skrypt PowerShell jest cytatem z odpowiedzi na podobne pytanie.

Jeśli uznasz to za pomocne, możesz głosować oryginalną odpowiedź, a nie ten post .

#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()
wiggle marsh
źródło
2
uznałem to za jedyne działające rozwiązanie. Zarówno notatnik, jak i metody EasyFileLocker nie blokują całkowicie pliku i nadal można je skopiować (testowane w systemie Windows 10)
HypeZ
W przypadku Powershell ISE użyj [void](Read-Host 'Press Enter to continue')zamiast tego, $host.UI.RawUI.ReadKey(...)ponieważ ReadKey nie jest obsługiwany w pseudo-konsoli w Powershell ISE.
SimonTewsi
26

Otwórz za pomocą MS-Excel ... ta aplikacja blokuje plik podczas otwierania.

lód
źródło
10
I myślałem, że Excel był wcześniej przydatny!
Scott Stafford,
11

FileLocker to darmowe narzędzie wiersza polecenia typu open source.

Stosowanie:

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.
RRKbabxW3
źródło
1
To działało dla mnie tam, gdzie inne rozwiązania nie
działały
2
Uwaga: w systemie Windows 10 należy go uruchomić jako administrator.
cowlinator
4

Nie mogę pisać komentarzy, dlatego dodaję swoje informacje w ten sposób:

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

EDYCJA: streszczenie drugiego pytania:

  • polecenie pauzy: ( >&2 pause ) >> file2lock.txt

  • Programy MS, takie jak Word lub Excel, blokują również (działa dla plików tekstowych)

  • Programowo używaj LockFileEx(Windows API) z LOCKFILE_EXCLUSIVE_LOCKiLOCKFILE_FAIL_IMMEDIATELY

Mayra Delgado
źródło
1

Oto jak powielam zachowanie użytkownika zablokowanego pliku do testowania błędów.

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

Dodaję ten wiersz do mojego testu jednostkowego, aby zablokować plik, a następnie uruchamiam test w trybie debugowania, aby zreplikować złe zachowanie, gdy dany plik jest zablokowany.

Nadal nie wiem, w jaki sposób użytkownicy biznesowi blokują dany plik. Jak powiedziałeś, notatnik nie może go zablokować wyłącznie.

Na szczęście zadeklarowanie czytnika strumieniowego blokuje wyłącznie plik, chyba że określono inaczej.

kincaid
źródło
1

Popieram rozwiązanie marsh-wiggle. Oto moja wersja skryptu:

# 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." 
}

Możesz to nazwać z cmd w następujący sposób:

powershell -ExecutionPolicy Unrestricted -file lock_file.ps1 "path\to\file_to_lock.txt"
Ciove
źródło
0

Do testowania Robocopy ERROR „odmowa dostępu” Właśnie usunąłem dostęp do odczytu dla użytkownika. Czy to zadziała?

W systemie Windows 10 można to łatwo zrobić z wiersza poleceń

plik blokujący chmod 'ur'

W systemie Windows 7 można użyć właściwości zabezpieczeń eksploratora plików.

Taksówka
źródło
-2

Zastąp „Twoje-hasło-tutaj” swoim hasłem i zapisz ten skrypt jako 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*

Po uruchomieniu pliku wsadowego pojawi się monit „Czy na pewno chcesz zablokować folder (T / N)”; wpisz Y i naciśnij enter, a folder zostanie zablokowany.

Uruchom ponownie plik wsadowy i wprowadź hasło, a folder i wszystkie pliki zostaną odblokowane ponownie.

nieznany z nazwiska
źródło
2
Działa to tylko w przypadku folderów, a co gorsza, zmienia nazwę folderu. To wcale nie wystarczy.
Twisty Impersonator