จะล็อคไฟล์แบบพิเศษได้อย่างไร?


87

ฉันต้องการระงับการล็อกแบบเอกสิทธิ์เฉพาะบุคคลบนไฟล์เพื่อไม่ให้สามารถอ่านหรือเขียนโดยอะไร มีเครื่องมือหรือคำสั่งของ Windows ที่ใช้งานง่ายหรือไม่

ฉันคิดว่าเครื่องมือหรือยูทิลิตี้จะใช้ฟังก์ชันLockFileEx Windows

หมายเหตุ : ฉันได้ลองใช้เครื่องมือแก้ไขข้อความอย่าง Notepad และ Notepad ++ ในไฟล์ข้อความ แต่พวกเขาไม่ได้ล็อคแบบเอกสิทธิ์เฉพาะบุคคลไว้


ทำไมไม่ลองทำดูล่ะ นอกจากนี้พวกเขาควรล็อคไว้นานเท่าไร? พวกเขาควรรอเหตุการณ์หรือไม่?
Mehrdad

6
ฉันคิดว่าการเขียนโปรแกรมอย่างหนึ่ง แต่คิดว่ามีเครื่องมือตัวแก้ไขหรือคำสั่งด่วนที่ฉันสามารถใช้ได้ ใน superuser ผู้ใช้ทั้งหมดไม่ใช่โปรแกรมเมอร์ bit.ly/lXT6ฉันไม่ต้องการไปเส้นทาง Stackoverflow ด้วยคำถามนี้ กำลังทดสอบพฤติกรรมของแอพเมื่อไม่สามารถเข้าถึงไฟล์ได้
John K

ฉันอาจจะทำเพื่อคุณ - เพียงแค่รู้ว่าเมื่อใดควรปลดล็อค
Mehrdad

ดูคำถามที่คล้ายกันของฉันด้วยsuperuser.com/questions/519389/flock-command-for-windows
eadmaster

เห็นได้ชัดว่าผู้แก้ไขเช่น Notepad และ Notepad ++ ไม่ได้เปิดไฟล์ไว้ไม่ใช่แบบพิเศษ
จอห์น

คำตอบ:


23

ลองEasy File Locker (ฟรีแวร์)

ป้อนคำอธิบายรูปภาพที่นี่


ไม่ทำงานบน Windows 2003
Eric Bonnot

14
แอปพลิเคชันนี้ไม่ปรากฏในไฟล์ "ล็อค" มากเท่ากับเปลี่ยนการอนุญาตในไฟล์ นี่เป็นข้อแตกต่างที่สำคัญหากคุณพยายามทดสอบว่าแอปพลิเคชันของคุณจัดการกับไฟล์ที่ถูกเปิด / ล็อคโดยแอปพลิเคชันอื่น ในกรณีของฉันแอปพลิเคชันนี้ไม่ทำงาน โซลูชัน 'notepad> file' ควรเป็นคำตอบที่นี่
javajavajavajavajava

1
ไม่ทำงานบน Windows 10 และถอนการติดตั้ง ระวัง!!
Shahar Prish

แอพนี้ทำให้หน้าจอสีน้ำเงินหลายจอล่มใน Windows 10 แอพนี้ออกแบบมาสำหรับการสร้างไฟล์ที่ไม่สามารถเข้าถึงได้ผ่านการเปลี่ยนแปลงการอนุญาตไม่ใช่การล็อกไฟล์โดยกระบวนการ การใช้ FileLocker จากคำตอบของ @ RRKbabxW3 นั้นทำงานได้อย่างสมบูรณ์
Jordan Mack

ไปที่หน้าจอสีน้ำเงินแห่งความตายใน Windows 10
Gupta

137

วิธีการแก้ปัญหาที่ง่ายขึ้น: ในไดเรกทอรีของดอกเบี้ยที่เรียกใช้จากบรรทัด cmd:

notepad >filetolock

ในฐานะ stdout ที่กำกับใหม่จะยังคงถูกล็อกจนกว่าแอปพลิเคชัน (แผ่นจดบันทึก) จะถูกยกเลิก

โปรดทราบว่า "filetolock" จะถูกเขียนทับโดย re-direct ดังนั้นคุณอาจไม่ต้องการใช้ไฟล์ที่มีความสำคัญใด ๆ "filetolock" ที่ว่างเปล่าจะไม่สำคัญกับแอปพลิเคชันที่คุณพยายามทดสอบเนื่องจากแอปไม่สามารถเปิดได้


38
ใช้การผนวกการเปลี่ยนเส้นทางแทนตอนนี้แทนที่เขียนทับ filetolock:notepad >>filetolock
eadmaster

5
ทางออกที่มีประโยชน์มากไม่จำเป็นต้องติดตั้งอะไร
Aprillion

5
นี่เป็นทางออกที่ดีกว่าการดาวน์โหลดฟรีแวร์มากขึ้น
BenCr

9
ยังคงใช้งานได้กับ Windows 10 ควรเป็นคำตอบที่ได้รับการยอมรับ
เร็ว ๆ นี้

8
ด้วยเหตุผลบางอย่างนี้จะต้องมีการดำเนินการใน cmd.exe มันไม่ทำงานใน PowerShell ไฟล์ถูกสร้างขึ้นและมีการเปิดแผ่นจดบันทึก แต่คุณยังสามารถลบไฟล์ได้แม้จะเปิดแผ่นจดบันทึกแล้ว ฉันทดสอบสิ่งนี้ทั้งบน Windows Server 2012 และ Windows 10
Ville Salonen

32

ล็อคไฟล์ไม่มีเครื่องมือของบุคคลที่ 3 , การเปลี่ยนแปลงไฟล์ไม่ถูกล็อคและไฟล์ไม่สามารถแม้แต่จะถูกคัดลอก

สคริปต์ 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
ฉันพบสิ่งนี้เป็นวิธีแก้ปัญหาการทำงานเท่านั้น ทั้งวิธีการ notepad และ EasyFileLocker ไม่ได้ล็อคไฟล์ทั้งหมดและยังสามารถคัดลอกได้ (ทดสอบบน Windows 10)
HypeZ

สำหรับ Powershell ISE ใช้[void](Read-Host 'Press Enter to continue')แทน$host.UI.RawUI.ReadKey(...)ReadKey ในคอนโซลหลอกใน Powershell ISE
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 จะต้องเรียกใช้ในฐานะผู้ดูแลระบบ
cowlinator

4

ฉันไม่สามารถเขียนความคิดเห็นดังนั้นฉันจึงเพิ่มข้อมูลของฉันด้วยวิธีนี้:

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

แก้ไข: สรุปคำถามอื่น ๆ :

  • คำสั่งหยุดชั่วคราว: ( >&2 pause ) >> file2lock.txt

  • โปรแกรม MS เช่น word หรือ excel lock ก็ใช้ได้เช่นกัน (ใช้ได้กับไฟล์ข้อความ)

  • ใช้แบบเป็นโปรแกรมLockFileEx(windows API) ด้วยLOCKFILE_EXCLUSIVE_LOCKและLOCKFILE_FAIL_IMMEDIATELY


1

นี่คือวิธีที่ฉันทำซ้ำพฤติกรรมของผู้ใช้ของไฟล์ที่ถูกล็อคเพื่อทดสอบข้อผิดพลาด

ติ่มซำเหมือนใหม่ 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'

สำหรับ windows 7 คุณสามารถใช้คุณสมบัติความปลอดภัย file explorer


-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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.