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: 開いたファイルへの処理を書く
}