意図的にファイルを排他的にロックする方法は?


87

他の人がファイルを読み書きできないように、ファイルの排他ロックを保持したい。これを行う簡単なWindowsツールまたはコマンドはありますか?

ツールまたはユーティリティがLockFileEx Windows関数を実装すると思います。

:テキストファイルでNotepadやNotepad ++などのテキストエディターを試しましたが、排他ロックを保持していません。


なぜ1つだけ作らないのですか?また、ロックを保持する期間はどのくらいですか?彼らはイベントを待つべきですか?
Mehrdad

6
プログラミングを検討しましたが、使用できるクイックツール、エディター、またはコマンドがあると考えました。スーパーユーザーでは、すべてのユーザーがプログラマーではありません。bit.ly/lXT6eyこの質問でStackoverflowルートに行きたくありませんでした。ファイルにアクセスできない場合のアプリの動作をテストしています。
ジョンK

私はあなたのために1つを作ることができるかもしれません-ちょうどレムはロックがいつ解除されるべきかを知っています。
Mehrdad


どうやら、メモ帳やメモ帳++などのエディターは、ファイルを非排他的に開いたままにしないでしょう。
ジョン14

回答:


23

Easy File Locker(フリーウェア)をお試しください。

ここに画像の説明を入力してください


Windows 2003では動作しません
Eric Bonnot

14
このアプリケーションは、ファイルの許可を変更するほどファイルを「ロック」するようには見えません。これは、アプリケーションが別のアプリケーションによってアクティブに開かれている/ロックされているファイルをどのように処理するかをテストする場合の重要な違いです。私の場合、このアプリケーションは機能しませんでした。「メモ帳>ファイル」ソリューションがここでの答えになるはずです。
javajavajavajavajava

1
Windows 10では動作しません。また、アンインストール可能です。気をつけろ!!
シャハールプリッシュ

このアプリは、Windows 10で複数のブルースクリーンクラッシュを引き起こしました。このアプリは、プロセスによるファイルロックではなく、アクセス許可の変更によりアクセスできないファイルを作成するためにも設計されています。@ RRKbabxW3の回答からFileLockerを使用すると、完全に機能しました。
ジョーダンマック

Windowsの10でブルースクリーンに行く
グプタ

137

より簡単なソリューション:対象のディレクトリでcmd行から実行します。

notepad >filetolock

リダイレクトされたstdoutとして、アプリケーション(メモ帳)が終了するまでロックされたままになります。

「filetolock」はリダイレクトによって上書きされることに注意してください。したがって、おそらく重要な既存のファイルを使用したくないでしょう。空の「filetolock」は、テストしようとしているアプリケーションにとっては問題になりません。アプリケーションはそれを開くことができないためです。


38
代わりに、今上書きするリダイレクトAPPEND使用filetolock:notepad >>filetolock
eadmaster

5
非常に便利なソリューション、何もインストールする必要はありません
Aprillion

5
これは、より多くのフリーウェアをダウンロードするよりもはるかに優れたソリューションです。
BenCr 14年

9
Windows 10
でも引き続き

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(...)Powershell ISE の擬似コンソールではReadKeyの代わりにReadKeyがサポートされていません。
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
これは、他のソリューションではうまくいかなかった私にとってはうまく
いきました。カウリネーター

2
Windows 10では、管理者として実行する必要があることに注意してください。
カウリネーター

4

コメントを書くことができないので、この方法で情報を追加します。

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

編集:他の質問の要約:

  • 一時停止コマンド: ( >&2 pause ) >> file2lock.txt

  • WordやExcelのロックなどのMSプログラムも(テキストファイルに対応)

  • プログラムでLockFileEx(windows API)を使用しLOCKFILE_EXCLUSIVE_LOCKLOCKFILE_FAIL_IMMEDIATELY


1

バグテストのために、ロックされたファイルのユーザーの動作を複製する方法を次に示します。

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

ユニットテストにその行を追加してファイルをロックし、デバッグモードでテストを実行して、特定のファイルがロックされた場合の不正な動作を再現します。

私のビジネスユーザーが特定のファイルをどのようにロックしているかはまだわかりません。あなたが言ったように、メモ帳は排他的にロックすることはできません。

幸いなことに、ストリームリーダーを宣言すると、特に指定しない限りファイルが排他的にロックされます。


1

2番目のソリューションはmarsh-wiggleです。これが私のバージョンのスクリプトです。

# 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 "access denied"をテストするために、ユーザーの読み取りアクセスを削除しました。それはうまくいくでしょうか?

Windows 10の場合、これはコマンドラインから簡単に実行できます。

chmod 'ur'ロックファイル

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.