OS:windows2000pro
VB:VB6.0sp5
ファイル:c:\work\test0411.csv
(workフォルダはEveryone共有:端末Aのみ)
端末:ABともにファイル共有を除き同環境

端末Aにて、システム(VBにて作成:下記参照)にて
上記ファイル(test0411.csv)に一定周期で書込を行っています

Private Sub output(ByVal ofile As String)
On Error GoTo trap
handle = FreeFile()
Open ofile For Append As #handle
(中略)
Print #handle, _
Close #handle
Exit Sub
trap:
'MsgBox Err.number & "," & Err.Description, vbInformation, "output"
End Sub

端末Bにて、エクスプローラから上記ファイル(test0411.csv)を
開いて閲覧しています

上記ファイル(test0411.csv)を閲覧している間に
(1)一定周期でデータの書込ができません
一旦ファイルを閉じ、再度開いた折、
閲覧していた間のデータが追加更新するように
したいのですが、どのようにすれば良いのでしょうか?

よろしくお願いいたします

このQ&Aに関連する最新のQ&A

A 回答 (2件)

私だったら、閲覧用のファイルを別にFilecopyなどで準備するか(それでもコピー先ファイルを開かれていたらエラーになりますが)、または、閲覧時に、元のファイルをバッチファイルなどでローカルにコピーさせて、それを開かせるようにします。


では
    • good
    • 0

それは「Bで開いている間にAで書き込むのがエラーになっても良いので、最終的に整合性が取れれば良い」という解釈でよいのかな?



とりあえず今までの流れを修正するとすれば、キューやコレクションを用意すれば簡単に実現できそうだ。キューで行う方法を考えてみたので参考になれば。

用意するもの
1.CSVのデータ1行を表すクラス(CsvQueueクラスとする)
 メンバー変数は、その1行のデータとCsvQueueクラスへのポインタ。データは面倒ならPublicでよいだろう。
 メンバー関数は、PutData()とGetData()。

CsvQueueクラス
Public strCsvData1 As String
Public strCsvData2 As String
Public strCsvData3 As String
Private queNextData As CsvQueue

Public Function PutData(ByVal q As CsvQueue) As Boolean
 If queNextData Is Nothing Then
  Set queNextData = q
  Exit Function
 End If
 PutData = queNextData.PutData(q)
End Function

Public Function GetData() As CsvData
 GetData = queNextData
End Function



CSV出力モジュール内(追加した行を++で表している)
++ Private csvRoot As CsvData ' Nothingに初期化しておくべし

Private Sub output(ByVal ofile As String)
On Error GoTo trap
handle = FreeFile()
Open ofile For Append As #handle
++ Do Until csvRoot Is Nothing
++  (中略と同じような内容)
++  csvRoot = csvRoot.GetData()
++ Loop
(中略)
Print #handle, _
Close #handle
Exit Sub
trap:
'MsgBox Err.number & "," & Err.Description, vbInformation, "output"
++ Dim csvTemp As New CsvData
++ csvTemp.strCsvData1 = ...
++ If csvRoot Is Nothing Then
++  Set csvRoot = csvTemp
++ Else
++  csvRoot.PutData(csvTemp)
++ End If
End Sub

今机上で作ったものなので間違いがあるかも。まぁ考え方としてはこんなのはどうかな。

この回答への補足

早速ではございますが、
ご教示いただきました内容にて実行いたしますと

Public Function PutData(ByVal q As CsvQueue) As Boolean

の個所にて、
エラー「ユーザー定義型は定義されていません」
が発生いたします
 よろしくお願いいたします

補足日時:2005/04/13 09:34
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます
また、丁寧にご教示頂戴し大変恐縮いたしております
早速試させていただきます

また、不明な点が出てくるかと存じます
多分、明日(4/13)午後以降になるかと存じますので
その折にはまたご教示いただければ幸いです
よろしくお願いいたします

お礼日時:2005/04/12 11:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング