您可以将您的文件放在自定义类列表中:
[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)
}
你可以用这个关于加密的问题:
Easy way to encrypt/obfuscate a byte array using a secret in .NET?
还有this is an example关于二进制格式化程序:
我已经发布了这个答案to my blog :)