Windows'da bir dosyayı değiştirmeden veya üçüncü taraf araçlarını kullanmadan nasıl kilitleyebilirim?


24

Bir dosyayı yerleşik araçlarla kilitlemenin bir yolu var, böylece silinemez veya üzerine yazılamaz?

Kopyalama komut dosyalarının test edilmesi lock files temporarilyiçin komut dosyalarındaki hata işleme konusunu kontrol etmem gerekiyor . XP'ye kadar onu kilitlemek için debug.exe'ye bir dosya yüklerken kullandım.

Windows 7'de (ve sonrasında) bir yol var mı?

Düzenleme
Bunu yapan programlar olduğunu biliyorum. Benim sorum, pencerelerde yerleşik bir mekanizma olup olmadığı. Bazen bir bilgisayardaki betiği kontrol etmem gerekiyor ve bunun için yeni programlar yüklemek istemiyorum.

Düzenle2
İşte size iyi öneriler: Bir dosyayı bilerek nasıl kilitleyebilirim? Ancak, 3. parti araçlara ihtiyaç duyar veya kilitlenecek dosyayı değiştirir.


Does not defteri hile sizin için çalışacak mı?
nixda

1
@ nixda No. Dosyanın üzerine yazar. Mevcut bir dosyayı değiştirmeden kilitlemem gerekiyor.
bataklık kıpırdatmak

Anlıyorum. Yakın
oylamamı

Yanıtlar:


45

Bence PowerShell muhtemelen bunu başarmanın en iyi yolu. Aşağıdaki gibi bir şey:

#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()

Duraklatılmış durumdayken, yukarıdaki komut dosyası "myfile.txt" dosyasını açmaya çalışırken aşağıdaki isteme yol açar:

görüntü tanımını buraya girin


2
Harika! Teşekkürler! Utancım için, powershell'de geliştirdiğimi itiraf etmeliyim ve bunun için .net sınıflarını kullanmayı düşünmedim. [Umarım bu daha ileri gitmeyecek :-)]
marsh-wiggle

1
Güzel cevap Meraklı, aşağıda bir MSDN bağlantı File::Openyöntemine çağrısı (özellikle, son argüman parametrelerini detaylandırma, 'None', dosyayı paylaşırken düşüşler başka konu / süreçlerle - ve aynı şekilde, karşılıklar Okuma / yazma yalnızca dosyayı kilitlemek için var veya bunların bir kombinasyonu).
Atılım

1
@moab Dosya kapandı ve sonda tanıtıcı serbest bırakıldı.
Dan,

2
$host.UI.RawUI.ReadKey(...)PowerShell ISE'de, ISE için ReadKey uygulanmadığından başarısız olacağını unutmayın . Çözüm geçicidir [void](Read-Host 'Press Enter to continue'). Kullanıcının tamamen aynı değil, herhangi bir tuşa basmak yerine Enter tuşuna basması gerekir. Ancak, çoğu amaç için yeterince iyi. Geçici çözüm bu blog gönderisinden geldi: jeffwouters.nl/index.php/2016/06/…
SimonTewsi

4

Aslında kullanmayacağım bir yazılımı yüklemeyi sevmediğim için VBScript'in bu mücevherini buldum:

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)"

Tüm kredi Torgeir Bakken'e gidiyor, yazının tamamını burada görebilirsiniz: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/


Yukarıdaki çözüm gibi powershell sevmeyenler için güzel
marsh-kıpırdatmak

0

Salt okunur olarak işaretleyemez misin? Bu, değiştirilmesine veya silinmesine izin vermeyerek dosyayı etkili bir şekilde "kilitler".

Attrib.exe komutu komut satırında bulunur ve bir dosyayı veya dizini salt okunur olarak ayarlamanıza izin verir. Bu komutla ilgili daha fazla bilgiyi burada bulabilirsiniz.

Bunun tersine, salt okunur olarak işaretlemek istedikleri dosyayı veya dizini sağ tıklatarak, özellikleri seçerek ve Salt Okunur kutusunu işaretleyerek GUI aracılığıyla aynı şeyi yapabilirsiniz. Apply / Ok öğesine tıkladıktan sonra yeni ayarı dosyaya veya dizine uygular.


3
Salt okunur özelliği yalnızca değişiklik yapılmasını önler, ancak silmeleri önler.
ComFreek

0

Dosya veya Klasör için sağ tıklayıp Özellikler'e gittiğinde, Erişilebilirliği Güvenlik Sekmesi ile dosyaya sınırlamak mümkün olmaz mıydı?

Kullanıcı PC'ye Yönetici erişimine sahipse, o zaman bu dosya / klasörle ilgili herhangi bir şey yapma becerisini başkalarının kaldırmasına izin vermeyecek mi?

Yazarken, çalışma bilgisayarımın hala WinXP Pro'da olduğunu itiraf etmeliyim, bu yüzden yukarıda belirtilenler artık mevcut olmayabilir. XP ile çalışma yıl


Kullanılabilir NTFS izinlerinin hiçbiri kilitli bir dosyanın davranışını taklit etmez. En yakını dosyayı salt okunur hale getirirdi, ancak OP'nin bu seçeneğin farkında olduğundan ve dosyayı iyi bir nedenden ötürü kilitlediğinden emin olduğundan emin olabiliriz.
Ben Reinstate Monica

-2

Bazı senaryolarda dosyanın adını yeni bir klasör oluşturarak iş yapabilir. (Yani dosyayı açmaya çalışırken bir hata alıyorum).


Bu gerçekten bir yorum ve asıl sorunun cevabı değil .
DavidPostill

Benim için görevdeki cevap beni bu sayfaya yönlendirdi. Senin gibi insanlar yüzünden birileri onu benzer görevlerinde bulamazlar.
öğlen

3
OP, mevcut bir dosyanın nasıl kilitleneceğini soruyordu . Aynı isimde bir klasör oluşturmak mümkün değildir. "Bir alt dizin veya dosya xxx zaten var", bu nedenle cevabınız sorudaki soruna uygulanamaz.
DavidPostill

Birçok durumda, uygulamanın onu değiştirmeye veya açmaya çalışırken bir hatayla karşılaşmasını sağlamak için "mevcut dosyayı kilitle" gerekiyor. Şimdi açık şeyler anlatmayı bırakacağım - iyi günler efendim.
öğlen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.