2012-11-27 3 views
0

My Excel VBA 워크 시트는 디렉터리에 로그를 만듭니다. 현재 로그는 삭제하지 않으므로 계속해서 생성됩니다.Excel VBA를 사용하여 최신 5를 제외한 로그 파일 제거

<worksheet_name>_YYYYMMDD_HH_MM_SS.log

이 일을 내 현재의 방법은에 이러한 로그를 던져하는 것입니다

그러나, 지금은 가장 최근의 5 내 로그가 다음과 같이 파일 이름으로 생성되어 유지하고 싶습니다 배열의 배열을 정렬하고, 이것이 첫 번째 5

내 질문을 계속 : 사람은 가장 (5) 최근의 로그 파일을 유지하는 더 나은 방법이 있습니까?

답변

1

실용적인 솔루션처럼 들립니다. FileSystemObject 라이브러리를 사용하여 모든 로그 파일을 수집 한 다음 루프를 반복합니다.

하나의 옵션 : 당신이 만든 날짜 나 수정 한 날짜에 따라 삭제 시도 할 수, 즉 파일이 전에 x 일 동안 생성 된 경우, 삭제합니다.

또한, 나는이 파일이 얼마나 중요한지 모르겠지만, 당신은 철저하게 삭제하는 대신 아카이브라는 폴더로 이동 할 수 있습니다. 예를 유지하는 것이었다 일 전

+0

+1'FileSystemObject'에 대해 알리므로, 새로운 것을 배웠습니다. – czchlong

0

하나의 시스템은 우리가 잠시 사용 5 개의 로그 파일에 "갭"이 있습니다.

파일 : : 그래서 당신은 처음 5 로그 파일을 만들 것 1,2,3,4,5

그런 다음, 6 일에, 당신의 격차가 6시에, 그래서 6 생성 및 삭제 1

파일 : 2,3,4,5,6

격차가 1 생성 및 삭제, 그래서 다음 날 1.에서 지금이 개

파일 : 1, 2, 3, 4, 5,6

격차 그래서 다음 날 2에 지금, 2 작성하고, 3

파일 삭제 : 1,2, 4,5,6

등 등 즉, * "차이를 찾기"새로운 파일을 작성 후 후 하나를 삭제 .

아이디어 만 있습니다. 나는 내가 여기에 추가 할 생각이 정확한 솔루션을 필요로하기 때문에

는 _ *이 오래된 질문은 비록

0

(예 이것은 런던 지하철을 참조 나쁜 농담입니다). 이 코드는 파일 이름이 문자열 비교로 정렬 할 수있는 것으로 끝나는 것으로 가정하므로 SomeName_YYYY-MM-DD 형식의 파일 일 수 있습니다. 24 시간 타임 스탬프도 통합 할 수 있습니다. 이 프로세스는 파일의 이름을 바꾸지 않으므로 다른 코드 (예 : _1, _2 등을 파일 이름에 추가하려는 경우)에서 점진적 수치 체계를 신중하게 관리해야합니다. 이 솔루션은 어레이보다 훨씬 더이 목적에 부합 컬렉션을 활용

참고.

Public Sub CleanBackups(filePathAndBaseName As String, fileExtension As String, maxCopiesToKeep As Integer) 
' 
' Calling Example 
'  CleanBackups "C:\Temp\MyLog", ".txt", 5 
' 
'  The above example would keep only the 5 versions of the file pattern "C:\Temp\MyLog*.txt" 
'   that are "LARGEST" in terms of a string comparison. 
'  So if MyLog_1.txt thru MyLog_9.txt exist, it will delete MyLog_1.txt - MyLog_4.txt 
'   and leave MyLog_5.txt - MyLog_9.txt 
'  Highly recommend using pattern MyLog_{YYYY-MM-DD_HhNn}.txt 

    Dim pathOnly As String 
    Dim foundFileName As String 
    Dim oldestFileIndex As Integer 
    Dim iLoop As Integer 

    Dim fileNameCollection As New Collection 

    pathOnly = Left(filePathAndBaseName, InStrRev(filePathAndBaseName, "\")) 
    foundFileName = Dir(filePathAndBaseName & "*" & fileExtension, vbNormal) 

    Do While foundFileName <> "" 
     fileNameCollection.Add foundFileName 
     foundFileName = Dir 
    Loop 

    Do While fileNameCollection.Count > maxCopiesToKeep 
    ' Find oldest file, using only the name which assumes it ends with YYYY-MM-DD and optionally a 24-hour time stamp 
     oldestFileIndex = 1 

     For iLoop = 2 To fileNameCollection.Count 
      If StrComp(fileNameCollection.Item(iLoop), fileNameCollection.Item(oldestFileIndex), vbTextCompare) < 0 Then 
       oldestFileIndex = iLoop 
      End If 
     Next iLoop 

     Kill pathOnly & "\" & fileNameCollection.Item(oldestFileIndex) 
     fileNameCollection.Remove oldestFileIndex 
    Loop 

End Sub 
관련 문제