[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/24(Thu) 18:34
投稿者名:こう
URL :
タイトル:
ログファイルの内容削除について
恐れ入ります。

ログファイルのサイズが500KBを超えると
ログファイルの中身を最初行から半分削除したいのですが、
どうすればよいのでしょうか

if サイズが500KBを越えた = true then
   テキストストリームでログファイルの行数取得
  リードラインで半分まで行数進む
  半分以降の文字列確保
  ログファイル削除
  新しくログファイル作成
  新しく作ったログファイルに上記で半分以降の文字列確保した値を
  ライトで書き込む
end if

上記のロジックでよいでしょうか?
私の知識ではこれしか考えられないので・・
他によい方法があるような気がして投稿しました。
 
ご教授下さい。
宜しくお願い致します。

投稿時間:2005/02/24(Thu) 18:43
投稿者名:じゃんぬねっと
Eメール:
URL :http://jeanne.wankuma.com/
タイトル:
Re: ログファイルの内容削除について
こんにちは、じゃんぬねっと です。

大体良いと思いますが、順番的にちょっと危ないかも。
書き込みに成功して、初めて元ファイルを削除しないと、データ損失する危険がありますよね?

投稿時間:2005/02/24(Thu) 18:54
投稿者名:こう
URL :
タイトル:
Re^2: ログファイルの内容削除について
ご返事有難う御座いました。

if サイズが500KBを越えた = true then
   テキストストリームでログファイルの行数取得
  リードラインで半分まで行数進む
  半分以降の文字列確保
  別名で新しくログファイル作成
  新しく作ったログファイルに上記で半分以降の文字列確保した値を
  ライトで書き込む
  書き込み成功
  ログファイル削除
  新しく作成したログファイル名を
  削除したログファイル名に変更する
end if

ですね
有難う御座いました。

投稿時間:2005/02/24(Thu) 19:02
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: ログファイルの内容削除について
多分、数秒以上かかるかと思います。
文字数、又は、バイト数で読み飛ばして残りを一気に読み込むと
1秒以内で処理できます。
又、残りの分を読み込まずにそのまま新しいファイルに書き込み
後で元のファイルを削除後ファイル名を変更するやり方も早く
なります。
残りの分をどのように処理するかで処理速度が大きく違ってきます
間違っても文字列を連結するような方法は避けるべきかと思います。
1秒以内で処理できる方法を取って下さい。

参考(過去のログ)

 Re: テキストファイルの内容を1行だけ削除.. - 花ちゃん 07/16-15:41 No.4848
 

投稿時間:2005/02/24(Thu) 20:54
投稿者名:こう
URL :
タイトル:
Re^4: ログファイルの内容削除について
ご教授有難う御座いました。
以下のソースを作成しました。
1秒以内で処理出来ました。
有難う御座いました。


    Dim objFile      As New FileSystemObject
    Dim tsTextStream As TextStream
    Dim tsDummyStream As TextStream
    Dim lFileSize    As Long
    Dim lFileLine    As Long
    Dim lLineCount   As Long
    Dim strReadBuf   As String


'ログファイルのサイズが500KBを超えると最初の行から半分削除して、サイズを半分にする
    If lFileSize >= LOG_FILESIZE Then 'LOG_FILESIZE(50万バイト)
        
        'ログファイルを読み取り専用で開き、ダミーログファイルを作成する
        Set tsTextStream = objFile.OpenTextFile(ログファイルパス, ForReading, False)
        Set tsDummyStream = objFile.OpenTextFile(ダミーファイルパス, 8, True)
        
    ’以前にラインプロパティでそう行数を取得している
        lFileLine = lFileLine / 2       '総行数を半分の行数にする
        
        'ファイルを読み込む
        Do Until tsTextStream.AtEndOfStream = True
            lLineCount = lLineCount + 1
            If lFileLine <= lLineCount Then
                strReadBuf = tsTextStream.ReadLine
                Call tsDummyStream.WriteLine(strReadBuf)
            Else
                tsTextStream.SkipLine '次の行
            End If
        Loop
        ’終了処理
        Call EndProcess(False, False, False, tsTextStream:=tsTextStream, _
            objFile:=objFile, tsDummyStream:=tsDummyStream)
            
        Call Kill("ログファイル名")     '以前のログファイル削除
        'ダミーファイルを元のログファイル名に変更
        Name "ダミーファイル名" As "ログファイル名"
    End If