- - PR -
ファイルの排他制御
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-05 11:28
Jitta様、あしゅ様解答ありがとうございます。
DBにもっと信頼を置いて設計を組み立てなおすことにいたします。 >バックアップを複数の方法で取っておくのは有効だと思います。 人為的なミス(間違って削除してしまうなど)に対しても強くなりますし。 アプリ上でとるログは、人為的なミスのリカバリに使用する方向で考えることにいたします。 リストア・リカバリ用のバックアップはOralceのRecovery Managerで管理することにいたします。 >Oracle のログ機能に任せ、そのログから復元するために、一連のコマンドを発行するアプリケーションを作ればいいのでは? 再起動で復旧できない障害について検討してみたいと思います。 バックアップについて、いろいろご指導いただきまことにありがとうございました。 スレッドのタイトルの件ですが、 ファイルの排他制御をするなら、名前つきのMUTEXと指摘していただきましたので、 以下のようなコンソールアプリケーションを作成してみました。 外部からループして起動すると、 エラーでいくつかのプロセスがアボートしてしいまいます。 Sub Main(ByVal CmdArgs() As String) Dim PathName As String = "D:\test.txt" Dim WritDat As String = Nothing For i As Integer = 0 To CmdArgs.Count - 1 WritDat &= CmdArgs(i) Next WriteCsv(PathName, WritDat) End Sub Private Sub WriteCsv(ByRef PathName As String, ByRef WriteDat As String) Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim mtx As Mutex ' = New Mutex Dim mflag As Boolean = False mtx = New Mutex(True, "myname", mflag) Do While mflag = False mtx.ReleaseMutex() mtx.Close() mtx = Nothing mtx = New Mutex(True, "myname", mflag) Loop mtx.WaitOne() Try Using writer As System.IO.StreamWriter = New System.IO.StreamWriter(PathName, True, enc) writer.WriteLine(WriteDat) writer.Close() End Using Catch ex As Exception End Try mtx.ReleaseMutex() mtx.Close() mtx = Nothing End Sub | ||||||||||||||||
|
投稿日時: 2009-02-05 23:11
どこで、どんな例外を出して、止まってしまうのでしょう? 例えば、Mutex コンストラクタ<microsoft.com> を見ると、このコンストラクタでは4種類の例外が送出される可能性があります。ArgumentException はないとして、どれかによって原因も対応方法も異なります。
いや、こんなことしなくても。。。
| ||||||||||||||||
|
投稿日時: 2009-02-06 09:43
Jitta様回答ありがとうございます。
動作の確認が取れました、ありがとうございます。 Mutexはこれで使うだけならできそうです。 セマフォを利用した、排他はどの用にすればよいでしょうか? VB6ではCreateSemaphore等のAPIを使用するようなのですが、 .NET Frameworkではセマフォはサポートされているのでしょうか? |
«前のページへ
1|2|3