質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

19191閲覧

テキストファイル書き込み中 判定

SUPER_SLiNKY

総合スコア76

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/11/15 10:46

テキストファイルに書き込むプログラムを実行中に別プログラムで、
下記の処理(ファイルがロックされているかチェックする)を実行したのですが、ファイルが使用中とみなされていないみたいでcatchに入りません。

ちなみにメモ帳を開いたまま下記の処理を実行してもcatchには入りませんでした。
ただ、サクラエディタを開いた状態だとcatchに入ります。

調べてみるとnotepadは排他制御を行っていないとかで上手くいっていないのではないかと思いましたが、規定プログラムをサクラエディタにして書き込み処理を行っている最中に下記処理を実行してもcatchには入りませんでした。

どうすれば書き込み中を判断できるでしょうか?

private bool IsFileLocked(string path)
{
FileStream stream = null;

try { stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None); } catch { return true; } finally { if (stream != null) { stream.Close(); } } return false;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ishi9

2016/11/16 01:55

残念ながら、メモ帳は単に中身を表示しているだけなのでその方法やそれに近い方法(ファイルの状態を調べる)では無理ですね。メモ帳は開いている最中に手動でそのファイルを消すことができます。真っ向から取り組むと大変ですが、そもそもなぜファイルがロックされているのかを判別したいのかが詳しくわかれば別のアプローチもあるかもしれません。その辺り詳しく説明願えますか?
guest

回答1

0

ベストアンサー

テキストファイル書き込み中 判定

正確に言えばこの判定は書き込みをしている期間を判定するものではありません。他のプロセスがそのファイルをOpen中かどうかを判定するものです。

メモ帳の例でいえば、おそらくファイルを開いたり書き込んだりする時に一瞬だけOpenし中身をアクセスし即座にCloseしてしまうのだと思います。従ってI/Oをしているちょうどそのときに上のプログラムを動かさない限り例外は起きません。一方編集中のファイルをずっとつかんだまま(Openしたまま)にするアプリケーションも考えられ、そういうものでファイルを編集中の場合は上のFileStream生成は例外を発するはずです。いずれにせよ上のプログラムでFileStreamの生成に成功したならそのファイルをOpen中の他のプロセスはいないはずです。

投稿2016/11/15 11:41

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SUPER_SLiNKY

2016/11/16 09:43

わかりました、ありがとうございますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問