• 締切済み

CSVファイルを開いている状態での書込処理について

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)一定周期でデータの書込ができません 一旦ファイルを閉じ、再度開いた折、 閲覧していた間のデータが追加更新するように したいのですが、どのようにすれば良いのでしょうか? よろしくお願いいたします

みんなの回答

  • i-touch
  • ベストアンサー率40% (170/415)
回答No.2

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

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

それは「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 今机上で作ったものなので間違いがあるかも。まぁ考え方としてはこんなのはどうかな。

nao0
質問者

お礼

早速のご回答ありがとうございます また、丁寧にご教示頂戴し大変恐縮いたしております 早速試させていただきます また、不明な点が出てくるかと存じます 多分、明日(4/13)午後以降になるかと存じますので その折にはまたご教示いただければ幸いです よろしくお願いいたします

nao0
質問者

補足

早速ではございますが、 ご教示いただきました内容にて実行いたしますと Public Function PutData(ByVal q As CsvQueue) As Boolean の個所にて、 エラー「ユーザー定義型は定義されていません」 が発生いたします  よろしくお願いいたします

関連するQ&A

専門家に質問してみよう