■No34976に返信(よっし〜さんの記事)
> 現在3つのファイルを結合して1つのファイルにして保存し、
zip などの「アーカイブ」では駄目なのでしょうか?
ファイル名、ファイルサイズ、タイムスタンプまで保持できますし、
データ破損チェックの仕組みも備えています。
あるいは、それぞれのバイナリを画素データと見做したうえで、
マルチページTIFFや Animated GIF とするという手法もあります。
(ストライドに気を使う必要があるので、zip の方が楽だとは思いますが)
どんなフォーマットでも良いなら、こういう手も。
<Serializable>
Public Class FileInfo
Public Property Name As String
Public Property Binary As Byte()
Public Sub New()
Name = Nothing
Binary = New Byte(-1) {}
End Sub
Public Sub New(filePath As String)
Name = filePath
Binary = File.ReadAllBytes(filePath)
End Sub
End Class
Sub Main()
Dim saveData As FileInfo() = {
New FileInfo("D:\ABC.XLS"),
New FileInfo("D:\EFG.PDF"),
New FileInfo("D:\HIJ.JPG")
}
'保存処理
Dim serializer As New BinaryFormatter()
Using outStream As New FileStream("D:\XYZ.DAT", FileMode.Create)
serializer.Serialize(outStream, saveData)
End Using
'読み取り処理
Dim loadedData As FileInfo()
Dim deserializer As New BinaryFormatter()
Using inStream As New FileStream("D:\XYZ.DAT", FileMode.Open)
loadedData = DirectCast(deserializer.Deserialize(inStream), FileInfo())
End Using
Console.WriteLine($"ファイル数={loadedData.Length}")
For Each info In loadedData
Console.WriteLine($" 名前={info.Name}")
Console.WriteLine($" 長さ={info.Binary.Length}")
Console.WriteLine($" 内容={BitConverter.ToString(info.Binary.Take(16).ToArray())}")
Next
End Sub