c# 讀寫文件時文件正由另一進程使用,因此該進程無法訪問該文件


C# IO 讀取文件,提示文件正被另一進程占用,因此無法訪問該文件;

讀取代碼:

var fStream = new FileStream(Path, FileMode.OpenOrCreate);

使用該方式讀取文件,如果文件被打開,則會拋出異常。

正確的讀取方式如下:

var fStream = new FileStream(Path, FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.ReadWrite);

注解:

一個文件同時被多個進程同時訪問是很正常的。參數 FileShare 可以指定該文件以何種共享的方式被多個進程同時訪問。

    //
    // 摘要:
    //     包含用於控制的訪問其他類型的常數 System.IO.FileStream 對象可以具有相同的文件。
    [ComVisible(true)]
    [Flags]
    public enum FileShare
    {
        //
        // 摘要:
        //     拒絕共享當前文件。 在關閉文件之前,任何請求打開的文件 (此進程或另一個進程) 將失敗。
        None = 0,
        //
        // 摘要:
        //     允許以后打開文件進行讀取。 如果未指定此標志,任何請求打開文件進行讀取 (通過這一過程或另一個進程) 無法關閉文件之前。 但是,即使指定了此標志,其他權限可能仍然需要訪問該文件。
        Read = 1,
        //
        // 摘要:
        //     允許以后打開文件進行寫入。 如果未指定此標志,任何請求打開文件進行寫入 (通過這一過程或另一個進程) 無法關閉文件之前。 但是,即使指定了此標志,其他權限可能仍然需要訪問該文件。
        Write = 2,
        //
        // 摘要:
        //     允許以后打開的文件進行讀取或寫入。 如果未指定此標志,任何請求打開文件進行讀取或寫入 (通過這一過程或另一個進程) 將失敗,在關閉文件之前。 但是,即使指定了此標志,其他權限可能仍然需要訪問該文件。
        ReadWrite = 3,
        //
        // 摘要:
        //     允許以后刪除文件。
        Delete = 4,
        //
        // 摘要:
        //     使文件句柄由子進程繼承。 這是不直接支持 Win32。
        Inheritable = 16
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM