VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/08/05(Tue) 17:15
投稿者かな
URL
タイトルRe^6: ログファイルの作り方

お世話になっております。花ちゃんさん、お返事どうもありがとうございます。
ランダムファイルでは確かに行数の保持が必要なのでソースが複雑になってしまいました。
なので、教えて頂いたサンプルを元に、先頭1行を順次削除する方法を採りたいと思います。

No.4848を参考にし(ほぼ同じ)、自分なりにログを書き込む標準モジュールを作ってみました。
以下のソースです。(VBは始めたばかりなので間違いだらけかもしれません。)
この中に自分の力では解決できなかった点がいくつかあります。また、ご教授願えませんでしょうか?
よろしくお願い致します。

(1)No.4848と違うところがあります。以下の1行です。ログファイルにどうしても余分に半角スペース
がひとつできてしまい、色々試したところ、「-1」とするところを「-2」としたらうまくいきました。
正しい直し方が分かりません。

    ReDim bytArray(lngFileLenB - lngDelByt - 2)

(2)ログを書き込む処理もバイナリーモードにしたかったのですが、私の知識ではうまくいかず、結局
Appendモードを使用しています。(試したのは、API関数「StrToArry」を使用してログ情報の文字列
をバイト配列にして、Putステートメントでそのバイト配列を追加するという方法です。)

(3)書き込んだログ各行の最初と最後にダブルクオーテーションが付いてしまうのも気になっているので
すが、直し方が分かりません。



'**********************************************************************************
'ログファイルの格納場所
Private Const strLogFilePath = "C:\Test\LogFile\"
'ログファイル名称
Private Const strLogFileName = "Test.log"
'使用するファイル番号
Private intFileNo As Integer
'--------------------------------------------------------------------------------
'   OpenFile
'   ファイルを開く
'   引数:ファイルオープンのモード
'           「0」バイナリー読み取りモード
'           「1」バイナリー書き込みモード
'           「2」追加モード
'--------------------------------------------------------------------------------
Public Sub OpenFile(intMode As Integer)
    
    '使用可能なファイルNoを取得
    intFileNo = FreeFile
    
    'ファイルをオープンする
    If intMode = 0 Then
        'バイナリーモード
        Open strLogFilePath & strLogFileName For Binary As #intFileNo
    ElseIf intMode = 1 Then
        'バイナリー(書き込み)モード
        Open strLogFilePath & strLogFileName For Binary Access Write As #intFileNo
    ElseIf intMode = 2 Then
        '追加モード
        Open strLogFilePath & strLogFileName For Append As #intFileNo
    End If

End Sub
'--------------------------------------------------------------------------------
'   CloseFile
'   ファイルを閉じる
'--------------------------------------------------------------------------------
Public Sub CloseFile()
    
    'ファイルを閉じる
    Close #intFileNo

End Sub
'--------------------------------------------------------------------------------
'   WriteLog
'   ログへの書き込み
'   引数:
'       [1]処理日時
'       [2]処理ID
'       [3]処理名称
'       [4]記録内容(開始、終了、エラー)
'       [5]エラー情報
'--------------------------------------------------------------------------------
Public Sub WriteLog( _
            strExecTime As String, _
            strExecID As String, _
            strExecName As String, _
            strExecInfo As String, _
            strExecError As String _
            )
    
    'ログ情報取得用変数
    Dim strLogInfo As String
    
    'ログ書き込み情報を取得、編集
    strLogInfo = strExecTime & " " & _
                 strExecID & " " & _
                 strExecName & " " & _
                 strExecInfo & " " & _
                 strExecError
    
    'ファイルを開く
    OpenFile (2)
        'ログを書き込む
        Write #intFileNo, strLogInfo
    'ファイルを閉じる
    CloseFile
    
    '古いログを削除する
    DeleteLog

End Sub
'--------------------------------------------------------------------------------
'   DeleteLog
'   古いログを削除する
'   備考:FileSystemObjectを使用するためには、参照設定
'      「Microsoft Scripting Runtime」が必要となる
'--------------------------------------------------------------------------------
Private Sub DeleteLog()
    'ファイルシステムへのアクセスを提供するオブジェクト
    Dim Fso            As New FileSystemObject
    'ファイルへのシーケンシャルアクセスを行うオブジェクト
    Dim FsoTS          As TextStream
    '削除する行
    Dim strDelTxt      As String
    Dim lngDelByt      As Long
    Dim bytArrayDel()  As Byte
    'ファイルに残す行
    Dim bytArray()     As Byte
    'ファイル全体(削除前)
    Dim lngFileLenB    As Long
    
    '1行目のデータを読み込む
    Set FsoTS = Fso.OpenTextFile(strLogFilePath & strLogFileName)
    strDelTxt = FsoTS.ReadLine
    FsoTS.Close
    Set FsoTS = Nothing
    
    'バイト数を取得する
    lngDelByt = LenB(StrConv(strDelTxt, vbFromUnicode)) + 1   '削除する行
    lngFileLenB = FileLen(strLogFilePath & strLogFileName)    'ファイル全体
    'Byte型配列のサイズを再宣言
    ReDim bytArrayDel(lngDelByt)                              '削除する行
    ReDim bytArray(lngFileLenB - lngDelByt - 2)               'ファイルに残す行
    
    'ファイルを開く
    OpenFile (0)
        'データを取得する
        Get #intFileNo, , bytArrayDel        '削除する行
        Get #intFileNo, , bytArray           'ファイルに残す行
    'ファイルを閉じる
    CloseFile
    
    'ファイルを削除する
    Kill strLogFilePath & strLogFileName
    
    'ファイルを開く
    OpenFile (1)
        'ファイルに残す行を書き込む
        Put #intFileNo, , bytArray
    'ファイルを閉じる
    CloseFile

End Sub
'**********************************************************************************


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -