它看起來像,如果它們的時間戳小於一些時間跨度不同,這將是足夠的一堆文件一起。
所以,如果你爲了通過他們的.LastWriteTimeUtc
的文件,然後你可以遍歷該列表,並檢查它多久是一個與前一個之間。如果差距很小,則將其添加到當前列表中,否則開始一個新列表。
我測試了使用文件的隨機選擇一個目錄下面的代碼,所以30天是爲一個適當的時間跨度,它看起來像也許兩三秒鐘將有利於您的使用:
Option Infer On
Option Strict On
Imports System.IO
Module Module1
''' <summary>
''' Get FileInfos bunched by virtue of having less than some time interval between their consecutive LastWriteTimeUtc when ordered by that.
''' </summary>
''' <param name="srcDir">Directory to get files from.</param>
''' <param name="adjacencyLimit">The allowable timespan to count as in the same bunch.</param>
''' <returns>A List(Of List(Of FileInfo). Each outer list has consecutive LastWriteTimeUtc differences less than some time interval.</returns>
Function GetTimeAdjacentFiles(srcDir As String, adjacencyLimit As TimeSpan) As List(Of List(Of FileInfo))
Dim di = New DirectoryInfo(srcDir)
Dim fis = di.GetFiles().OrderBy(Function(fi) fi.LastWriteTimeUtc)
If fis.Count = 0 Then
Return Nothing
End If
Dim bins As New List(Of List(Of FileInfo))
Dim thisBin As New List(Of FileInfo) From {(fis(0))}
For i = 1 To fis.Count - 1
If fis(i).LastWriteTimeUtc - fis(i - 1).LastWriteTimeUtc < adjacencyLimit Then
thisBin.Add(fis(i))
Else
bins.Add(thisBin)
thisBin = New List(Of FileInfo) From {fis(i)}
End If
Next
bins.Add(thisBin)
Return bins
End Function
Sub Main()
Dim src = "E:\temp"
'TODO: choose a suitable TimeSpan, e.g. TimeSpan.FromSeconds(3)
Dim adjacencyLimit = TimeSpan.FromDays(30)
Dim x = GetTimeAdjacentFiles(src, adjacencyLimit)
For Each b In x
Console.WriteLine("***********")
For Each fi In b
'TODO: merge each fi into a PDF.
Console.WriteLine(fi.Name)
Next
Next
Console.ReadLine()
End Sub
End Module
我建議兩到三秒,因爲如果文件已經存儲在FAT類型(例如FAT32或exFAT,可用於USB記憶棒,舊磁盤驅動器等)文件系統上,那麼時間戳的分辨率將會有已經兩秒鐘了。
我已經刪除了iText標籤,因爲在您編寫自己的過程中,您已經涵蓋了您的問題的iText部分。爲了幫助您,我添加了一些看起來更相關的標籤。 –
您認爲每個文件組的時間戳是完全匹配的嗎?他們能在一分鐘之內,一小時之內,一秒鐘之內......? –
日期和時間戳是完全一樣的第二,不知道它是如何做的,但另一個程序提供了我們的tiff –