ファイルをカスタムクラスのリストに入れることができます。
[Serializable]
public class FileEntry
{
public string FileName {get;set;}
public string FileRelativePath {get;set;}
public byte[] FileContents {get;set;}
}
ファイルをリストに追加します。
List<FileEntry> files = new List<FileEntry> ();
for .......
{
files.Add(new FileEntry()
{
FileName = .....,
FileRelativePath = .....,
FileContents = File.ReadAllBytes(......),
};
}
次に、BinarryFormatterを使用して、この構造をバイト配列に変換します。
byte[] filesBytes;
BinaryFormatter ser = new BinaryFormatter();
using(MemoryStream ms = new MemoryStream())
{
ser.Serialize(ms, files);
filesBytes = ms.ToArray();
}
これで、byte []としての構造ができました。次のように、簡単な方法で簡単に暗号化できます。
filesBytes = Encrypt(filesBytes , ......);
次に、暗号化されたバイトをカスタム拡張機能を使用して特定の場所に保存します。
File.WriteAllBytes(".........\.....encr",filesBytes);
次に、ファイルを再度開いてクリアデータを読み取る場合は、次のようにします。
byte[] encryptedData = File.ReadAllBytes(".......\.....encr");
同じアルゴリズムでコンテンツを復号化します。
byte[] clearContent = Decrypt(encryptedData, ......);
そして、コンテンツを一次構造に逆シリアル化します。
BinaryFormatter ser = new BinaryFormatter();
using(MemoryStream ms = new MemoryStream(clearContent))
{
List<FileEntry> files = ser.Deserialize(ms) as List<FileEntry>;
}
次に、必要に応じて、ファイルの内容を特定の場所に書き込みます。
foreach(var file in files)
{
File.WriteAllBytes(string.Format("........{0}...{1}",file.FileRelativePath , file.FileName), file.FileContents)
}
暗号化に関する次の質問を使用できます。
.NETのシークレットを使用してバイト配列を暗号化/難読化する簡単な方法は?
そして、これはバイナリフォーマッタに関する例です。
私はこの答えを私のブログに投稿しました:)