110,533
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
namespace Console_CS
{
class Program
{
public static void Main()
{
CGameGlobal g = new CGameGlobal();
//读取记录, 第一次读取文件时需要暂时注释掉, 因为还没有生成记录文件
g = CObjFileStore.LoadObj("Global.dat") as CGameGlobal;
//只在第一次执行时添加记录, 执行第一遍以后就应该注释起来
g.lstSdcsData.Clear();
for (int i = 0; i < 5000; i++)
{
string strNow = DateTime.Now.ToString();
g.lstSdcsData.Add(strNow);
}
//输出记录
for (int i = 0; i < 5000; i++)
{
Console.WriteLine(g.lstSdcsData[i] + "\t" + i);
}
//保存记录
CObjFileStore.SaveObj("Global.dat", g);
}
}
}
/// <summary>
/// 记录类
/// </summary>
[System.Serializable]
public class CGameGlobal
{
public List<string> lstSdcsData = new List<string>();
}
/// <summary>
///
/// </summary>
class CObjFileStore
{
const string keyStr = "yourkey"; //加密的KEY字符,用MD5码生成128位KEY密钥
const string ivStr = "youriv"; //加密的IV字符,用MD5码生成128位IV密钥
/// <summary>
/// 将对象保存为文件
/// </summary>
/// <param name="uFilename">文件名及地址</param>
/// <param name="uTarget">保存对象,需[Serializable]</param>
static public void SaveObj(string uFilename, object uTarget)
{
IFormatter formatter = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
formatter.Serialize(mStream, uTarget);
Rijndael rijn = Rijndael.Create();
MD5 md5 = MD5.Create();
byte[] Key = md5.ComputeHash(Encoding.ASCII.GetBytes(keyStr));
byte[] IV = md5.ComputeHash(Encoding.ASCII.GetBytes(ivStr));
FileStream fStream = new FileStream(uFilename, FileMode.Create, FileAccess.Write,
FileShare.None);
CryptoStream cStream = new CryptoStream(fStream, rijn.CreateEncryptor(Key, IV),
CryptoStreamMode.Write);
StreamWriter sWriter = new StreamWriter(cStream, Encoding.ASCII);
char[] data = Encoding.ASCII.GetChars(mStream.ToArray());
sWriter.Write(data);
sWriter.Flush();
sWriter.Close();
cStream.Close();
fStream.Close();
mStream.Close();
}
/// <summary>
/// 从文件读取对象
/// </summary>
/// <param name="uFilename">文件名及地址</param>
/// <returns>反序列化后的对象,类型为object</returns>
static public object LoadObj(string uFilename)
{
IFormatter formatter = new BinaryFormatter();
Rijndael rijn = Rijndael.Create();
MD5 md5 = MD5.Create();
byte[] Key = md5.ComputeHash(Encoding.ASCII.GetBytes(keyStr));
byte[] IV = md5.ComputeHash(Encoding.ASCII.GetBytes(ivStr));
FileStream fStream = new FileStream(uFilename, FileMode.Open, FileAccess.Read,
FileShare.Read);
CryptoStream cStream = new CryptoStream(fStream, rijn.CreateDecryptor(Key, IV),
CryptoStreamMode.Read);
StreamReader sReader = new StreamReader(cStream);
string ftxt = sReader.ReadToEnd();
byte[] bytes = Encoding.ASCII.GetBytes(ftxt);
MemoryStream mStream = new MemoryStream(bytes);
object result = formatter.Deserialize(mStream);
sReader.Close();
cStream.Close();
fStream.Close();
mStream.Close();
return result;
}
}
//StreamWriter sWriter = new StreamWriter(cStream, Encoding.ASCII);
//char[] data = Encoding.ASCII.GetChars(mStream.ToArray());
//sWriter.Write(data);
mStream.Position = 0;
mStream.CopyTo(cStream);
//sWriter.Flush();
//sWriter.Close();
CryptoStream cStream = new CryptoStream(fStream, rijn.CreateDecryptor(Key, IV),
CryptoStreamMode.Read);
//StreamReader sReader = new StreamReader(cStream);
//string ftxt = sReader.ReadToEnd();
//byte[] bytes = Encoding.ASCII.GetBytes(ftxt);
//MemoryStream mStream = new MemoryStream(bytes);
MemoryStream mStream = new MemoryStream();
cStream.CopyTo(mStream);
mStream.Position = 0;
object result = formatter.Deserialize(mStream);
//sReader.Close();