วิธีล็อคไฟล์ใน Windows โดยไม่เปลี่ยนหรือใช้เครื่องมือของบุคคลที่สาม


24

มีวิธีการล็อกไฟล์ด้วยเครื่องมือออนบอร์ดหรือไม่จึงไม่สามารถลบหรือเขียนทับได้

สำหรับการทดสอบสคริปต์การคัดลอกฉันจำเป็นต้องlock files temporarilyตรวจสอบการจัดการข้อผิดพลาดในสคริปต์ จนกระทั่ง XP ฉันใช้การโหลดไฟล์ใน debug.exe เพื่อล็อค

มีวิธีใดใน Windows 7 (และใหม่กว่า)

แก้ไข
ฉันรู้ว่ามีโปรแกรมที่ทำเช่นนี้ คำถามของฉันคือถ้ามีกลไกในตัวใน windows บางครั้งฉันต้องตรวจสอบสคริปต์บนพีซีและไม่ต้องการติดตั้งโปรแกรมใหม่สำหรับสิ่งนั้น

Edit2
ต่อไปนี้เป็นคำแนะนำที่ดี: วิธีล็อกไฟล์โดยเฉพาะอย่างยิ่ง? อย่างไรก็ตามต้องการเครื่องมือของบุคคลที่สามหรือเปลี่ยนไฟล์ที่จะล็อค


ไม่หลอกลวง Notepadทำงานสำหรับคุณ?
nixda

1
@nixda ไม่มันเขียนทับไฟล์ ฉันต้องการล็อคไฟล์ปัจจุบันโดยไม่เปลี่ยนมัน
มาร์ชกระดิก

ฉันเห็น. ฉันถอนการโหวตอย่างใกล้ชิดของฉัน
nixda

คำตอบ:


45

ฉันคิดว่า 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 (This releases the current handle and unlocks the file)
$file.Close()

ในขณะที่หยุดชั่วคราวสคริปต์ด้านบนทำให้เกิดพรอมต์ต่อไปนี้เมื่อพยายามเปิด "myfile.txt":

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


2
ที่ดี! ขอบคุณ! สำหรับความอัปยศของฉันฉันต้องยอมรับว่าฉันพัฒนาใน PowerShell และไม่คิดที่จะใช้คลาส. net สำหรับสิ่งนี้ [ฉันหวังว่าจะไม่ไปอีก :-)]
มาร์ช-wiggle

1
คำตอบที่ดี สำหรับคนที่อยากรู้อยากเห็นนี่คือลิงค์ MSDN ไปยังFile::Openวิธีการรายละเอียดพารามิเตอร์ของการโทร (โดยเฉพาะอาร์กิวเมนต์สุดท้าย'None', ปฏิเสธการแชร์ไฟล์กับเธรด / กระบวนการอื่น ๆ - และเช่นเดียวกันบทบัญญัติที่มีอยู่เพื่อล็อคไฟล์สำหรับอ่าน / เขียนเท่านั้น หรือการรวมกัน)
Breakthrough

1
@moab ไฟล์ถูกปิดและหมายเลขอ้างอิงที่ปล่อยออกมาในตอนท้าย
Dan

2
โปรดสังเกตว่า$host.UI.RawUI.ReadKey(...)จะล้มเหลวใน PowerShell ISE เนื่องจากไม่มีการใช้งาน ReadKey สำหรับ ISE [void](Read-Host 'Press Enter to continue')วิธีแก้ปัญหาคือ ไม่เหมือนกับผู้ใช้ต้องกด Enter แทนปุ่มใด ๆ อย่างไรก็ตามดีพอสำหรับวัตถุประสงค์ส่วนใหญ่ วิธีแก้ปัญหามาจากโพสต์บล็อกนี้: jeffwouters.nl/index.php/2016/06/…
SimonTewsi

4

เนื่องจากฉันไม่ชอบการติดตั้งซอฟต์แวร์ที่ฉันจะไม่ใช้จริง ๆ ฉันจึงพบอัญมณีของ VBScript นี้:

Const ForAppending = 8
Set oFSO = CreateObject("Scripting.FileSystemObject")

Set f = oFSO.OpenTextFile("C:\Tst\My2.txt", ForAppending, True)

MsgBox "Press OK to unlock the file(s)"

เครดิตทั้งหมดไปที่ Torgeir Bakken คุณสามารถดูโพสต์แบบเต็มได้ที่นี่: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/


ที่ดีสำหรับผู้ที่ไม่ชอบ PowerShell เช่นการแก้ปัญหาดังกล่าวข้างต้น
บึง-กระดิก

0

คุณไม่สามารถทำเครื่องหมายว่าเป็นแบบอ่านอย่างเดียวได้หรือไม่ สิ่งนี้จะ "ล็อค" ไฟล์อย่างมีประสิทธิภาพโดยไม่อนุญาตให้เปลี่ยนหรือลบไฟล์

คำสั่ง attrib.exe มีให้ที่บรรทัดคำสั่งและจะช่วยให้คุณตั้งค่าไฟล์หรือไดเรกทอรีให้อ่านได้อย่างเดียว ข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งนั้นอยู่ที่นี่

ในทางกลับกันคุณสามารถทำสิ่งเดียวกันผ่าน GUI โดยการคลิกขวาที่ไฟล์หรือไดเรกทอรีที่คุณต้องการทำเครื่องหมายอ่านอย่างเดียวเลือกคุณสมบัติและทำเครื่องหมายในกล่องอ่านอย่างเดียว คลิกที่ Apply / Ok จากนั้นใช้การตั้งค่าใหม่กับไฟล์หรือไดเรกทอรี


3
คุณลักษณะอ่านอย่างเดียวป้องกันไม่ให้แก้ไข แต่ไม่ได้ลบออก
ComFreek

0

เป็นไปไม่ได้ที่จะ จำกัด การเข้าถึงไฟล์ด้วยแท็บความปลอดภัยเมื่อคุณคลิกขวาและไปที่คุณสมบัติสำหรับไฟล์หรือโฟลเดอร์

หากผู้ใช้มีสิทธิ์การเข้าถึงของผู้ดูแลระบบในพีซีสิ่งนี้จะไม่อนุญาตให้เขาลบความสามารถอื่น ๆ ทั้งหมดที่จะทำอะไรกับไฟล์ / โฟลเดอร์หรือไม่?

ฉันต้องยอมรับว่าฉันพิมพ์พีซีที่ทำงานของฉันยังอยู่ใน WinXP Pro ดังนั้นสิ่งที่ฉันระบุไว้ข้างต้นอาจไม่สามารถใช้งานได้อีกต่อไป - ฉันยังไม่สะดวกกับกล่อง Win 8.1 Pro ใหม่ที่บ้านเหมือนที่ฉันเป็น ปีของการทำงานกับ Win XP


ไม่มีสิทธิ์ NTFS ที่มีอยู่จะเลียนแบบพฤติกรรมของไฟล์ที่ถูกล็อค ที่ใกล้เคียงที่สุดจะทำให้ไฟล์เป็นแบบอ่านอย่างเดียว แต่เราสามารถมั่นใจได้ว่า OP ตระหนักถึงตัวเลือกนั้นและกำลังขอให้ล็อกไฟล์ด้วยเหตุผลที่ดี
ฉันพูดว่า Reinstate Monica

-2

ในบางสถานการณ์การสร้างโฟลเดอร์ใหม่ที่มีชื่อไฟล์อาจทำงานได้ (เช่นได้รับข้อผิดพลาดขณะพยายามเปิดไฟล์)


นี่เป็นความคิดเห็นจริงๆและไม่ใช่คำตอบสำหรับคำถามเดิม
DavidPostill

สำหรับฉันมันเป็นคำตอบในงานที่นำฉันมาที่หน้านี้ เพราะคนอย่างคุณบางคนจะไม่พบมันในงานที่คล้ายกัน
noonex

3
OP ถูกถามถึงวิธีการล็อคไฟล์ที่มีอยู่ ไม่สามารถสร้างโฟลเดอร์ที่มีชื่อเดียวกันได้ "ไดเรกทอรีย่อยหรือไฟล์ xxx มีอยู่แล้ว" ดังนั้นคำตอบของคุณไม่สามารถใช้กับปัญหาในคำถามได้
DavidPostill

ฉันมีหลายกรณีที่ต้อง "ล็อคไฟล์ที่มีอยู่" เพื่อให้แน่ใจว่าแอปพลิเคชันจะได้รับข้อผิดพลาดในการพยายามแก้ไขหรือเปิด ฉันจะหยุดอธิบายสิ่งที่ชัดเจนในตอนนี้ - ขอให้เป็นวันที่ดีนะ
noonex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.