- PR -

テキストファイルの排他について

1
投稿者投稿内容
川崎
常連さん
会議室デビュー日: 2003/05/02
投稿数: 25
投稿日時: 2003-05-29 11:58
いつもお世話になっています。川崎です。

VB.NETでWebアプリ開発をしております。

各端末からファイル書込みをさせようと思い、
書込時に排他制御を組み込もうと思いました。
色々試したあげく、うまくいったのが以下の方法でした。


ページ側(aspx.vb)側処理
'+----------------------------------------------------------+
Dim loglog As New B_LogOut()
Application.Lock()
loglog.LogFileOut("あいうえお" & Now)
Application.UnLock()
'+----------------------------------------------------------+

クラス側(.vb)
'+----------------------------------------------------------+
Public Class B_LogOut
Public Sub LogFileOut(ByVal p_strTxt As String)

Dim encodedata As System.Text.Encoding
Dim writer As System.IO.StreamWriter, reader As
System.IO.StreamReader
Dim source As System.IO.DirectoryInfo = New
System.IO.DirectoryInfo("C:\")

'書込み処理
Try
writer = New System.IO.StreamWriter("C:\testlog.txt", True, _
System.Text.Encoding.GetEncoding("Shift_JIS"))
writer.WriteLine(p_strTxt)
writer.Close()
Catch
End Try
End Sub
End Class
'+----------------------------------------------------------+

ページ側で、Application.Lock() をやっていますが、
これをクラス側の関数(LogFileOut)を呼ぶ都度記述しないといけない
ために、クラス側の関数(LogFileOut)内にApplication.Lock()
を記述したところ、エラーとなりました。


「System.NullReferenceException:
オブジェクト参照がオブジェクト インスタンスに設定されていません。」


クラス(.vb)側で Application.Lock() は使用できないのでしょうか。
また、他になにか排他制御処理でよい方法はないでしょうか。
どなたか御教授願います。

Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-05-29 14:34
こんにちは。

自作クラス内で Application.Lock() を呼び出すのであれば、
System.Web.HttpContext の Currentプロパティを取得し、
(HttpContextオブジェクトが得られます)
そこから、Application プロパティをたどって Lock()メソッドを
呼び出すことができます。

このスレッドが参考になると思います。
川崎
常連さん
会議室デビュー日: 2003/05/02
投稿数: 25
投稿日時: 2003-05-29 15:16
ありがとうございます。

以下のようにしましたら、うまくいきました。

+-------------------------------------------------------------------+
Public Sub LogFileOut(ByVal p_strTxt As String)

Dim encodedata As System.Text.Encoding
Dim writer As System.IO.StreamWriter, reader As System.IO.StreamReader
Dim source As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("C:\")

''書込み処理

System.Web.HttpContext.Current.Application.Lock() '*ロック*

writer = New System.IO.StreamWriter("C:\testlog.txt", True, _
System.Text.Encoding.GetEncoding("Shift_JIS"))
writer.WriteLine(p_strTxt)
writer.Close()

System.Web.HttpContext.Current.Application.UnLock() '*ロック解除*

End Sub
+-------------------------------------------------------------------+

どうもありがとうございました。助かりました。

1

スキルアップ/キャリアアップ(JOB@IT)