using System;
using System.IO;
using System.Reflection;
namespace Application
{
class MainClass
{
public static void Main (string[] args)
{
// Имя файла для проверки передается в качестве аргумента коммандной строки
// Если ничего не передано - вывести информацию об использовании
if (args.Length == 0) {
usage ();
} else {
// Перебор аргументов коммандной строки
foreach (string file in args) {
try {
// Проверка файла
checkFile (file);
} catch (Exception ex) {
Console.WriteLine ("При проверке файла({0}) возникло исключение: {1}", file, ex.Message);
}
}
}
}
// Имя исполняемого файла сборки
private static readonly string programFile = Path.GetFileName (Assembly.GetEntryAssembly ().Location);
// Выводит информацию об использовании
private static void usage ()
{
Console.WriteLine ("Использовать: {0} [имя файла] [имя файла] ...", programFile);
}
private const short sumLength = 4;
// Проверка файла
private static void checkFile (string path)
{
// Открытие потока в режиме чтения двоичных данных
using (Stream stream = new FileStream (path, FileMode.Open, FileAccess.Read))
using (BinaryReader binaryReader = new BinaryReader (stream)) {
long length = stream.Length;
if (length < 4) {
throw new Exception (string.Format ("Длина файла менее {0}х байт", sumLength));
}
// Установим указатель на контрольную сумму
stream.Seek (-sumLength, SeekOrigin.End);
// Читаем контрольную сумму
UInt32 orig = binaryReader.ReadUInt32 ();
Console.WriteLine ("Сохраненная сумма(последние {1} байта файла): 0x{0:X8}", orig, sumLength);
// Установим указатель на начало
stream.Seek (0, SeekOrigin.Begin);
// Сумма
UInt32 sum = 0;
Console.WriteLine ("Длина файла:{0}", length);
try {
while (length-- > sumLength) {
// Читаем и суммируем
sum += binaryReader.ReadByte ();
}
} catch (EndOfStreamException) {
}
Console.WriteLine ("Посчитана сумма: 0x{0:X8} (суммы {1}совпадают)", sum, sum == orig ? "" : "не ");
}
}
}
}
>186010.exe C:\Windows\System32\csrss.exe
Сохраненная сумма(последние 4 байта файла): 0x00000000
Длина файла:7680
Посчитана сумма: 0x0005CC66 (суммы не совпадают)
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.