0

「Product.15082012.txt」、「Product.16082012.txt」、「Service.15082012.txt」、「Service.16082012.txt」など、VB.NET で開発されたアプリケーションから日付ごとに作成されたログ ファイルがあります。 C:\ログ」. 作成されるログファイルの形式は、「Product.ddMMyyyy.txt」と「Service.ddMMyyyy.txt」です。

過去 6 か月間の "C:\Logs" フォルダー内のログ ファイルをループし、"C:\Logs\Archive" の下にある "archive.15082012.zip" および "archive.16082012.zip" のように圧縮する必要があります。別のアーカイブ アプリケーションを介して。

つまり、フォルダーをループしている間、製品とサービスを日付ごとに 1 つの zip ファイルに圧縮する必要があります。

どうやってやるの?ファイルを圧縮する方法は知っていますが、ファイルを日付ごとにピックアップして「Product.ddMMyyyy.txt」と「Service.ddMMyyyy.txt」をグループ化する方法がわかりません

Private Sub AddToArchive(ByVal zip As Package, ByVal fileToAdd As String)
    'Replace spaces with an underscore (_) 
    Dim uriFileName As String = fileToAdd.Replace(" ", "_")

    'A Uri always starts with a forward slash "/" 
    Dim zipUri As String = String.Concat("/", _
               IO.Path.GetFileName(uriFileName))

    Dim partUri As New Uri(zipUri, UriKind.Relative)
    Dim contentType As String = _
               Net.Mime.MediaTypeNames.Application.Zip

    'The PackagePart contains the information: 
    ' Where to extract the file when it's extracted (partUri) 
    ' The type of content stream (MIME type):  (contentType) 
    ' The type of compression:  (CompressionOption.Normal)   
    Dim pkgPart As PackagePart = zip.CreatePart(partUri, _
               contentType, CompressionOption.Normal)

    'Read all of the bytes from the file to add to the zip file 
    Dim bites As Byte() = File.ReadAllBytes(fileToAdd)

    'Compress and write the bytes to the zip file 
    pkgPart.GetStream().Write(bites, 0, bites.Length)

End Sub
4

1 に答える 1

1

シナリオについては、以下のサンプルをご覧ください。

Private Shared Function GetZipFile(ByVal zipFileNameWithPath As String, ByVal parallelDeflateThreshold As Integer) As ZipFile
    Dim zip = New ZipFile(zipFileNameWithPath)
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression
    ' For using multiple threads to compress the files. 
    '-1 for single thread and never use parallel deflat 
    '0 for always use parallel deflate
    zip.ParallelDeflateThreshold = parallelDeflateThreshold
    'For  very larger files of size more than 2GB after compression
    zip.UseZip64WhenSaving = Zip64Option.AsNecessary
    Return (zip)
End Function
Public Shared Sub ZipFiles(ByVal filesToZip As List(Of System.IO.FileInfo), ByVal zipFileNameWithPath As String, ByVal parallelDeflateThreshold As Integer)
    Dim fileInfo As New System.IO.FileInfo(zipFileNameWithPath)
    If fileInfo IsNot Nothing Then
        fileInfo.Delete()
    End If
    Using zip = GetZipFile(zipFileNameWithPath, parallelDeflateThreshold)
        For Each file In filesToZip
            zip.AddFile(file.FullName, String.Empty)
        Next
        zip.Save()
    End Using
End Sub
Public Shared Sub GetFiles(ByVal folderPath As String)
    Dim directory As New System.IO.DirectoryInfo(folderPath)
    Dim startDate As DateTime = DateTime.Now.AddMonths(-6)
    Dim datesFilterList As New Dictionary(Of String, String)
    While startDate <= DateTime.Now
        datesFilterList.Add(startDate.ToString("ddMMyyyy"), String.Concat("*.", startDate.ToString("ddMMyyyy"), ".txt"))
        startDate = startDate.AddDays(1)
    End While
    For Each filter As KeyValuePair(Of String, String) In datesFilterList
        Dim files As System.IO.FileInfo() = directory.GetFiles(filter.Value)
        If files.Count > 0 Then
            Dim zipFileName As String = String.Concat("\archive.", filter.Key.ToString(), ".zip")
            ZipFiles(files.ToList(), String.Concat(folderPath, "\Archive", zipFileName), 0)
        End If
    Next
End Sub

ここからダウンロードできる次のIconic.Zip.dllへの参照が必要になります。

注:フォルダ構造は次のようになっていると思います。

フォルダ構造

于 2012-08-16T09:59:36.040 に答える