string path = @"1.dat";
int len = 1024 * 1024;
var rnd = new Random();
var sw = Stopwatch.StartNew();
var b = new byte[4];
Console.WriteLine("Test started");
using (var map = MemoryMappedFile.CreateFromFile(path, FileMode.Create, path, len))
{
using (var accessor = map.CreateViewAccessor())
{
for (var i = 0; i < len / 4; ++i)
{
b[0] = (byte)rnd.Next(0, 255);
b[1] = (byte)rnd.Next(0, 255);
b[2] = (byte)rnd.Next(0, 255);
b[3] = (byte)rnd.Next(0, 255);
accessor.WriteArray(rnd.Next(0, len / 4) * 4, b, 0, 4);
}
}
}
Console.WriteLine("Test end time - " + sw.ElapsedMilliseconds);
Console.ReadKey();
FileInfo f = new FileInfo(@"C:\example.dat");
using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (BinaryReader br = new BinaryReader(fs))
{
int bytesRead = 0;
byte[] buffer = new byte[256]; // размер буфера 256 единиц байт
StringBuilder result = new StringBuilder();
while ((bytesRead = br.Read(buffer, 0, buffer.Length)) != 0) // читаем не более 256 единиц байт в buffer
{
// из buffer следует извлекать не более bytesRead (в конце это число может быть меньше 255)
}
}
}
/// /// Шифрует строку value
///
/// Строка которую необходимо зашифровать
/// Ключ шифрования
public static string Encrypt(string str, string keyCrypt)
{
return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(str), keyCrypt));
}
/// /// Расшифроывает данные из строки value
///
/// Зашифрованая строка
/// Ключ шифрования
/// Возвращает null, если прочесть данные не удалось
[DebuggerNonUserCodeAttribute]
public static string Decrypt(string str, string keyCrypt)
{
string Result;
try
{
CryptoStream Cs = InternalDecrypt(Convert.FromBase64String(str), keyCrypt);
StreamReader Sr = new StreamReader(Cs);
Result = Sr.ReadToEnd();
Cs.Close();
Cs.Dispose();
Sr.Close();
Sr.Dispose();
}
catch (CryptographicException)
{
return null;
}
return Result;
}
private static byte[] Encrypt(byte[] key, string value)
{
SymmetricAlgorithm Sa = Rijndael.Create();
ICryptoTransform Ct = Sa.CreateEncryptor((new PasswordDeriveBytes(value, null)).GetBytes(16), new byte[16]);
MemoryStream Ms = new MemoryStream();
CryptoStream Cs = new CryptoStream(Ms, Ct, CryptoStreamMode.Write);
Cs.Write(key, 0, key.Length);
Cs.FlushFinalBlock();
byte[] Result = Ms.ToArray();
Ms.Close();
Ms.Dispose();
Cs.Close();
Cs.Dispose();
Ct.Dispose();
return Result;
}
private static CryptoStream InternalDecrypt(byte[] key, string value)
{
SymmetricAlgorithm sa = Rijndael.Create();
ICryptoTransform ct = sa.CreateDecryptor((new PasswordDeriveBytes(value, null)).GetBytes(16), new byte[16]);
MemoryStream ms = new MemoryStream(key);
return new CryptoStream(ms, ct, CryptoStreamMode.Read);
}