web-dev-qa-db-ja.com

ロックされたファイルをC#で(おそらく非セーフモードで)読み取るための最も侵襲的な方法は何ですか?

ロックされている可能性のあるWindowsファイルを読み取る必要がありますが、他のプロセスがファイルに書き込むのを妨げるような種類のロックを作成したくありません。

また、ファイルが排他的にロックされていても、中身を見たいのですが。

これは私の正確な使用例ではありませんが、SQL/Exchangeログまたはデータベースファイルが使用およびマウントされている間に読み取る方法を検討してください。破損を引き起こしたくありませんが、ファイルの内部を確認して読み取りたいのです。

39

ファイルをコピーせずにそれを行うことができます this の記事を参照してください:

トリックはFileShare.ReadWriteを使用することです(記事から):

private void LoadFile()
{
    try
    {
        using(FileStream fileStream = new FileStream(
            "logs/myapp.log",
            FileMode.Open,
            FileAccess.Read,
            FileShare.ReadWrite))
        {
            using(StreamReader streamReader = new StreamReader(fileStream))
            {
                this.textBoxLogs.Text = streamReader.ReadToEnd();
            }
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show("Error loading log file: " + ex.Message);
    }
} 
50
Kazar

ファイルがロックされていても、コピーを作成して読み取ることができます。

または、SQLがファイルを開いた方法に応じて、FileStreamのStreamReader

new FileStream("c:\myfile.ext", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
1
CaffGeek