Lebih
Cara cek file lock?
Apakah ada cara untuk memeriksa apakah file yang terkunci tanpa menggunakan try/catch block?
Sekarang, satu-satunya cara yang aku tahu adalah untuk hanya membuka file tersebut dan menangkap setiap Sistem.IO.IOException`.
246
12
Ketika saya dihadapkan dengan masalah yang sama, saya selesai dengan kode berikut:
Satu jawaban yang lain bergantung pada informasi lama. Yang satu ini memberikan solusi yang lebih baik.
Lama yang lalu itu mustahil untuk dapat mendapatkan daftar proses penguncian file karena Windows hanya tidak melacak informasi itu. Untuk mendukung [Restart Manajer API][1], informasi yang kini dilacak. Restart Manajer API tersedia yang dimulai dengan Windows Vista dan Windows Server 2008 ([Restart Manager: Run-time Persyaratan][2]).
Saya menempatkan bersama-sama kode yang mengambil jalan berkas dan mengembalikan sebuah
Daftar<Proses>
dari semua proses yang mengunci file tersebut.Tidak, sayangnya, dan jika anda berpikir tentang hal ini, informasi yang akan berguna pula karena file bisa menjadi terkunci berikutnya kedua (baca: jangka waktu yang pendek).
Mengapa khusus yang perlu kamu ketahui jika file yang terkunci sih? Mengetahui bahwa mungkin memberi kita cara lain untuk memberikan anda nasihat yang baik.
Jika kode anda akan terlihat seperti ini:
Kemudian antara dua garis, proses lain bisa dengan mudah mengunci file, memberikan anda masalah yang sama anda mencoba untuk menghindari untuk mulai dengan: pengecualian.
Anda juga bisa memeriksa apakah ada proses yang menggunakan file ini dan menampilkan daftar program anda harus dekat terus seperti installer.
Alih-alih menggunakan interop yang dapat anda gunakan .NET FileStream kelas metode Lock dan Unlock:
FileStream.Kunci http://msdn.microsoft.com/en-us/library/system.io.filestream.lock.aspx
FileStream.Membuka http://msdn.microsoft.com/en-us/library/system.io.filestream.unlock.aspx
Anda bisa menghubungi LockFile melalui interop pada wilayah file yang anda tertarik. Ini tidak akan melempar pengecualian, jika berhasil anda akan memiliki kunci pada sebagian dari file (yang diselenggarakan oleh proses anda), bahwa kunci akan diadakan sampai anda memanggil UnlockFile atau proses meninggal.
Variasi DixonD's jawaban yang sangat baik (di atas).
Penggunaan:
Berikut ini's variasi DixonD's kode yang menambah jumlah detik untuk menunggu untuk file untuk membuka, dan coba lagi:
Anda dapat melihat jika file terkunci dengan mencoba untuk membaca atau mengunci diri anda terlebih dahulu.
Silakan lihat jawaban saya di sini untuk informasi lebih lanjut.
Namun, cara ini, anda akan tahu bahwa masalah ini bersifat sementara, dan coba lagi nanti. (E. g., anda bisa menulis thread itu, jika menghadapi kunci ketika mencoba untuk menulis, terus mencoba sampai kunci hilang.)
Yang IOException, di sisi lain, tidak dengan sendirinya cukup spesifik bahwa penguncian penyebab IO kegagalan. Mungkin ada alasan-alasan yang tidak't sementara.
Hal yang sama tetapi dalam Powershell
Apa yang akhirnya saya lakukan adalah: