C# - ファイルを読み取り専用で開くには

ファイルを読み取り専用で開くには、`FileStream` のコンストラクタに次のように指定する。

別のプロセスからの書き込みを許可するかどうかによって、FileShare の指定が異なる。


別のプロセスからの書き込みも禁止する場合は `FileShare.Read` を指定する。

using (var stream = new System.IO.FileStream(@"C:\tmp\test.txt", 
                                             FileMode.Open, 
                                             FileAccess.Read, 
                                             FileShare.Read))
{
    // TODO: 開いたファイルへの処理を書く
}


別のプロセスからの書き込みは許可する場合は `FileShare.ReadWrite` を指定する。

自分の中で読み取り専用と言うとこちらのイメージ。
自分は上書きできないが、別の人はできる、みたいな。
たしか Excel で読み取り専用に設定するとこの動きになるはずだ。

using (var stream = new System.IO.FileStream(@"C:\tmp\test.txt", 
                                             FileMode.Open, 
                                             FileAccess.Read, 
                                             FileShare.ReadWrite))
{
    // TODO: 開いたファイルへの処理を書く
}


読み取り専用なので、書き込みしようとするとエラーが起きる。

System.NotSupportedException: 'ストリームでは書き込みはサポートされていません。'

using (var stream = new System.IO.FileStream(@"C:\tmp\test.txt",
                                             FileMode.Open,
                                             FileAccess.Read,
                                             FileShare.ReadWrite))
{
    var text = "あいうえお";
    var bytes = System.Text.Encoding.Default.GetBytes(text);
    stream.Write(bytes, 0, bytes.Length);
}


`FileInfo.OpenRead` メソッドを使う方法もある。

OpenRead メソッドで開いた場合、別のプロセスからの書き込みもできない。
(FileStream のコンストラクタに FileShare.Read を指定した場合と同じ)

var file = new FileInfo(@"C:\tmp\test.txt");
using (var stream = file.OpenRead())
{
    // TODO: 開いたファイルへの処理を書く
}

いいなと思ったら応援しよう!