概要
前日に保存した画像ファイルと今日保存した画像ファイルの差分をとり、
今日新規追加された画像のみ残し、前日と同じファイルは削除します。
背景
他のエンジニアさんが前述の処理を実装していたのですが、前日と今日の画像ファイルを二重ループでチェックしており、処理に非常に時間がかかっていました。
前日1000ファイル×当日1000ファイル=1000×1000ループ
となり、指数関数的に処理時間が延びていくことになります。
数秒で終わらせたいと思い、Invode Codeを使って実現してみました。
フローチャート
Dim ys, td As String
result = New List(Of String)
For Each ys In ysImgFiles
For Each td In tdImgFiles
Dim ysfileNm, tdfileNm As String
ysfileNm = Path.GetFileName(ys)
tdfileNm = Path.GetFileName(td)
If tdfileNm.Equals(ysfileNm) Then
result.Add(td)
Exit For
End If
Next
Next
- 同ファイル名リストをもとに、今日のフォルダ内から全削除します。
Dim d As String
For Each d In delFiles
File.Delete(d)
Next
実行結果
新規追加された画像ファイルのみ残っています。
処理時間はほんの数秒です。
補足
VB.NETのコードでやっていることなので、Blue Prismでも作れそうです。