Rumah >pembangunan bahagian belakang >C++ >Bolehkah penguncian fail diperiksa di C# tanpa menggunakan pengecualian?

Bolehkah penguncian fail diperiksa di C# tanpa menggunakan pengecualian?

Barbara Streisand
Barbara Streisandasal
2025-02-02 22:11:09876semak imbas

Can File Locking Be Checked in C# Without Using Exceptions?

Pemeriksaan penguncian fail deterministik di C#

C# pemaju sering menemui ralat "fail yang digunakan oleh proses lain" ketika cuba mengakses fail sebelum disimpan. Walaupun pengendalian pengecualian adalah amalan standard, pendekatan yang lebih diramalkan adalah wajar untuk aplikasi tertentu.

Ini boleh dicapai dengan menggunakan

dengan FileInfo.Open dan FileAccess.Read. Pembukaan fail yang berjaya (tanpa pengecualian) menunjukkan fail tersedia. Sebaliknya, FileShare.None menandakan kunci. IOException

inilah kaedah yang lebih baik:

<code class="language-csharp">protected virtual bool IsFileLocked(FileInfo file)
{
    // Attempt to open the file for reading with exclusive access
    try
    {
        using (FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None))
        {
            // Successful opening; file is not locked
            return false;
        }
    }
    catch (IOException)
    {
        // File is locked
        return true;
    }
}</code>
Kaedah ini menawarkan pendekatan deterministik untuk pengesanan kunci fail, mengelakkan pergantungan pada pengecualian. Walau bagaimanapun, adalah penting untuk mengingati ini hanya berfungsi dengan pasti untuk fail

tidak dibuka dengan akses tulis. Cuba menggunakan dengan FileAccess.ReadWrite akan sentiasa gagal, walaupun fail itu dibuka. FileShare.None

Atas ialah kandungan terperinci Bolehkah penguncian fail diperiksa di C# tanpa menggunakan pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn