Автор работы: Пользователь скрыл имя, 05 Апреля 2011 в 18:19, курсовая работа
В данной курсовой работе необходимо разработать программу для поиска в свободных кластерах символьных последовательностей из заданного набора.
//Вычисление длины файла в кластерах
_SizeFileClusters = _SizeFile / _Disk.ClusterSize + (uint)((_SizeFile % _Disk.ClusterSize == 0)
? 0 : 1);
#region Получение короткого имени файла
StringBuilder lpszShortPath = new StringBuilder(512);
UInt32 ShortNameRes = Win32API.GetShortPathName(new StringBuilder(_File.FullName), lpszShortPath, 512);
if (ShortNameRes==0)
_Error = _Error | 1;
#endregion
//Вспомогательные переменные
Int32 L32Bytes;//младшие 32 бита long
Int32 H32Bytes;//Старшие 32 бита long
UInt32 PositionRes;// Результат позиционирования
byte[] lpBuffer = new byte[512];// Буффер для записи и чтения
UInt32 pNumberOfBytesRead;//Число прочитанных байт
UInt32 pNumberOfBytesWrite;//Число записанных байт
bool ReadRes;//Результат чтения
bool WriteRes;//Результат записи
ulong Position;//Позиция на диске
Encoding
ASCIIConverter=Encoding.
if (_Error==0)
{
#region
string
ShortNameFile = lpszShortPath.ToString().
if (ShortNameFile.IndexOf(".") != -1)
{
ShortNameFile = ShortNameFile.Insert(
ShortNameFile = ShortNameFile.Replace(".", "");
}
ShortNameFile = ShortNameFile + new string(' ', 11 - ShortNameFile.Length);
#endregion
#region Получение позиции файла
//Поиск записи файла в заданном каталоге.
//Позиция каталога задана переменной BeginingDyrectory
if(Disk.cHDevice.IsInvalid==fa
{
Position = BeginingDyrectory;//Позиция на диске для начала поиска
L32Bytes = (Int32)((Position << 32) >> 32);//Получение младших 32 бит позици
H32Bytes = (Int32)(Position >> 32);//Получение старших 32 бит позици
//Позиционируемся на начало каталога
PositionRes = Win32API.SetFilePointer(Disk.
if(!(PositionRes==Win32API.
{
while (true)
{
//Чтение сектора в каталоге
ReadRes = Win32API.ReadFile(_Disk.
if (lpBuffer[0] == 0)
{
break;
}
//Разбиение прочитанного сектора на записи длиной 32 байта
for (int p = 0; p < 16; p++)
{
//Поиск имени файла в начальных 11 байтах каждой записи
}
if (_PositionByte != 0)
Position += 512;// если сектор просмотрен и файл не найден, чтение следующего сектора
}
}
else
_Error = _Error|4;//Возведение 4 бита ошибки
}
else
_Error = _Error|8;//Возведение 5 бита ошибки
#endregion
}
if(_Error==0 && _SizeSlack>0 )
{
#region
Position = _PositionSector;//Позиция сектора где найден файл
L32Bytes = BitConverter.ToInt32(BitConver
H32Bytes = BitConverter.ToInt32(BitConver
//Выполняем функцию позиционирования на нужный сектор
PositionRes = Win32API.SetFilePointer(Disk.
if(!(PositionRes==Win32API.
{
//Изменяем содержимое нужного сектора, сектор был прочитан ранее при поиске записи
//Изменяем только те байты которые отвечают за длину файла. Делаем длину кратную размеру сектора
lpBuffer[_PositionByte] = BitConverter.GetBytes(_
lpBuffer[_PositionByte+1] = BitConverter.GetBytes(_
lpBuffer[_PositionByte+2] = BitConverter.GetBytes(_
lpBuffer[_PositionByte+3] = BitConverter.GetBytes(_
//Записываем измененный сектор в нужное место, где хранился оригинал
WriteRes = Win32API.WriteFile(_Disk.