RunningCSharp

Microsoft系開発者による、雑多な記事。記事は個人の見解であり、所属組織を代表するものてはありません。

【VB(.net)】 jpgファイルの破損チェック

JPGのSOI、EOIが既定の法則通りに入っていないファイルを検出するプログラムです。

Imports System.IO

Module Program

    '対象フォルダのパス
    Dim folderpath As String = "C:\Users\USER\Pictures\Screenshots"
    Sub Main(args As String())
        Dim jpgfiles As String() = System.IO.Directory.GetFiles(
    folderpath, "*.jpg", System.IO.SearchOption.AllDirectories)
        jpgfiles.ToList().ForEach(
            (Sub(path)
                 Using fs As New System.IO.FileStream(path, FileMode.Open, FileAccess.Read)
                     Dim Buffer(fs.Length) As Byte
                     fs.Read(Buffer, 0, Buffer.Length)
                     Dim s = BitConverter.ToString(Buffer)
                     '先頭のSOIチェック 
                     Dim SOI As Integer = s.IndexOf("FF-D8")
                     'EOIが存在するかチェック
                     Dim IsEOI As Boolean = s.Substring(s.Length - 8, 8).Equals(("FF-D9-00"))

                     If Not (SOI = 0 And IsEOI) Then
                         Console.WriteLine(path & " is broken jpeg file")
                     End If
                 End Using
             End Sub))
    End Sub

End Module

破損したjpgファイルを検出すると、下記のような形でコンソールに出力します。

f:id:ys-soniclab:20190822211519p:plain
実行結果