DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストファイルの書き込みと読み込みについて

環境/言語:[VB.NET]
分類:[.NET]

現在、あるプロセスによって不定期に書き込まれているテキストファイルからデータを読み込むプログラムを作っています。

この時、書き込みを邪魔せずにテキストファイルを開く方法はあるでしょうか?

どうか宜しくお願いします。

言語: VB.Net2005Express
OS  : WINDOWS 2000
■No18279に返信(takaさんの記事)
> 現在、あるプロセスによって不定期に書き込まれているテキストファイルからデータを読み込むプログラムを作っています。
>
> この時、書き込みを邪魔せずにテキストファイルを開く方法はあるでしょうか?

どのようにファイルを開いているのでしょうか?もしFileShareを指定していないようでしたら、ReadWriteを指定してみてください。
■No18281に返信(管理人さんの記事)
> ■No18279に返信(takaさんの記事)
>>現在、あるプロセスによって不定期に書き込まれているテキストファイルからデータを読み込むプログラムを作っています。
>>
>>この時、書き込みを邪魔せずにテキストファイルを開く方法はあるでしょうか?
>
> どのようにファイルを開いているのでしょうか?もしFileShareを指定していないようでしたら、ReadWriteを指定してみてください。

御指導ありがとうございます。

ファイル書き込み様のプロセスの方を
Dim path As String = "c:\temp\MyTest.txt"
Dim fs1 As FileStream
fs1 = New FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read)
Dim info As Byte() = New UTF8Encoding(True).GetBytes("書き込みたい文字列." & vbCrLf)
fs1.Write(info, 0, info.Length)
fs1.Close()
として

読み込み様のプロセスの方を
Dim path As String = "c:\temp\MyTest.txt"
fs2 = New FileStream(path2, FileMode.Open, FileAccess.Read, FileShare.Write)
Dim b(1024) As Byte
fs2.Read(b, 0, b.Length)
fs2.Close()

としてみました。

何となく上手く動いているような気がしますが、これで良いのかどうか判りません。
もっと、いい方法がありましたら、御指導お願いします。
> 何となく上手く動いているような気がしますが、これで良いのかどうか判りません。
> もっと、いい方法がありましたら、御指導お願いします。

「上手く動いているような気」とはどういうことでしょうか?うまくいっていないのでしたらまだしも、そうでないのでしたら、なぜ「もっと、いい方法」が必要なのでしょうか?(「もっと、いい方法」の意味も分かりませんし...。)
定石のようなものかどうか確認したいのでは?
動いていてもそのやり方が「普通」なのかどうか心配になるときが
ときどきあります。

今回の件については申し訳ありませんがわかりません。
■No18299に返信(YASさんの記事)
> 定石のようなものかどうか確認したいのでは?
> 動いていてもそのやり方が「普通」なのかどうか心配になるときが
> ときどきあります。
>
> 今回の件については申し訳ありませんがわかりません。

皆さん申し訳ありませんでした。

「上手く動いているような気」とは、
テストで、連続して書き込みをしているテキストファイルにアクセスしてちゃんと書き込みが出来たという事でした。
ただ、自分で書いたコードに自信が無く、本当にこれで良いのか判断が出来ませんでした。
もっと良い方法とは、私の書いたコードが変なのかどうかを評して頂きたかったという意図でした。

お騒がせして済みませんでした。
解決済み!
> ただ、自分で書いたコードに自信が無く、本当にこれで良いのか判断が出来ませんでした。
> もっと良い方法とは、私の書いたコードが変なのかどうかを評して頂きたかったという意図でした。

了解しました。言われてみれば確かに、読み込みのコードは間違えているようです。これでは、すべて読込めるか分かりません。

もし今までStreamWriterやStreamReaderクラスを使って読み書きしていたのであれば、作成したFileStreamを基にしてこれらのインスタンスを作成してはいかがでしょうか。次のような感じです。

Dim path As String = "c:\temp\MyTest.txt"
Dim fs1 As FileStream
fs1 = New FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read)
Dim sw As New StreamWriter(fs1)
sw.WriteLine("書き込みたい文字列.")
sw.Close()

Dim str As String = ""
Dim fs2 As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim sr As New StreamReader(fs2)
str = sr.ReadToEnd()
sr.Close()

DOBON.NET | プログラミング道 | プログラミング掲示板