他のユーザーがファイルを読み書きできないように、ファイルに排他ロックをかけたいのです。これを行うための簡単なWindowsツールまたはコマンドはありますか?
ツールまたはユーティリティが LockFileEx Windows関数を実装すると思います。
メモ:メモ帳やメモ帳++などのテキストエディタをテキストファイルで試してみましたが、排他的ロックはかけられていません。
Easy File Locker (フリーウェア)を試してください。
より簡単な解決策:目的のディレクトリでcmd行から実行します。
notepad >filetolock
リダイレクトされた標準出力としては、アプリケーション(メモ帳)が終了するまでロックされたままになります。
"filetolock"はリダイレクトによって上書きされるので、おそらく重要な既存のファイルを使用したくないでしょう。空の "filetolock"はテストしようとしているアプリケーションにとっては重要ではありません。アプリケーションはそれを開くことができないからです。
ファイルをロックする他社製ツールなしで、ファイルに変更を加えないファイルはコピーできない
この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()
MS-Excelで開く...このアプリは開いている間ファイルをロックします。
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.
私はコメントを書くことができないので、私はこのように私の情報を追加します:
編集:他の質問のまとめ:
一時停止コマンド:( >&2 pause ) >> file2lock.txt
WordやExcelなどのMSプログラムもロックします(テキストファイルでも動作します)。
LOCKFILE_EXCLUSIVE_LOCK
およびLOCKFILE_FAIL_IMMEDIATELY
と一緒にプログラム的にLockFileEx
(windows API)を使用する
これが私がバグテストのためにロックされたファイルのユーザーの振る舞いを再現する方法です。
新しいStreamReaderとしてディム( "C:\ test\sampleFile.txt")
その行を自分のユニットテストに追加してファイルをロックし、次にデバッグモードでテストを実行して、特定のファイルがロックされているときの悪い動作を再現します。
私はまだ私のビジネスユーザーがどのように与えられたファイルをロックしているのか知りません。あなたが言ったように、メモ帳はそれを排他的にロックすることはできません。
幸いなことに、ストリームリーダーを宣言すると、特に指定しない限りファイルは排他的にロックされます。
私はマーシュウィグルによって2番目の解決策を取ります。これが私のバージョンのスクリプトです。
# 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"