Автор работы: Пользователь скрыл имя, 05 Апреля 2011 в 18:19, курсовая работа
В данной курсовой работе необходимо разработать программу для поиска в свободных кластерах символьных последовательностей из заданного набора.
Форматирование FAT 12 обычно характерно только для небольших дисков объемом не более 16 Мбайт, чтобы не использовать кластеры более 4 Кбайт. По этой же причине считается, что FAT 16 целесообразнее для дисков с объемом не более 512 Мбайт, а для больших дисков лучше подходит FAT32, которая способна использовать кластеры 4 Кбайт при работе с дисками объемом до 8 Гбайт и только для дисков большего объема начинает использовать 8, 16 и 32 Кбайт. Максимальный размер раздела FAT16 ограничен 4 Гбайт, такой объем дает 65 536 кластеров по 64 Кбайт каждый, а максимальный размер раздела FAT32 практически не ограничен — 232 кластеров по 32 Кбайт.
Файловые системы FAT12 и FAT16 получили большое распространение благодаря их применению в операционных системах MS-DOS и Windows 3.х — самых массовых операционных системах первого десятилетия эры персональных компьютеров. По этой причине эти файловые системы поддерживаются сегодня и другими ОС, такими как UNIX, OS/2, Windows NT/2000 и Windows 95/98. Однако из-за постоянно растущих объемов жестких дисков, а также возрастающих требований к надежности, эти файловые системы быстро вытесняются как системой FAT32, впервые появившейся в Windows 95 OSR2, так и файловыми системами других типов.
Файловые системы FAT 12 и FAT 16 оперировали с именами файлов, состоящими из 12 символов по схеме «8.3». В версии FAT 16 операционной системы Windows NT был введен новый тип записи каталога — «длинное имя», что позволяет использовать имена длиной до 255 символов, причем каждый символ длинного имени хранится в двухбайтном формате Unicode. Имя по схеме «8.3», названное теперь коротким (не нужно путать его с простым именем файла, также называемого иногда коротким), по-прежнему хранится в 12-байтовом поле имени файла в записи каталога, а длинное имя помещается порциями по 13 символов в одну или несколько записей, следующих непосредственно за основной записью каталога. Каждый символ в формате Unicode кодируется двумя байтами, поэтому 13 символов занимают 26 байт, а оставшиеся 6 отведены под служебную информацию. Таким образом у файла появляются два имени — короткое, для совместимости со старыми приложениями, не понимающими длинных имен в Unicode, и длинное, удобное в использовании имя. Файловая система FAT32 также поддерживает короткие и длинные имена.
Таблица FAT при фиксированной разрядности индексных указателей имеет переменный размер, зависящий от объема области данных диска. При удалении файла из файловой системы FAT в первый байт соответствующей записи каталога заносится специальный признак, свидетельствующий о том, что эта запись свободна, а во все индексные указатели файла заносится признак «кластер свободен». Остальные данные в записи каталога, в том числе номер первого кластера файла, остаются нетронутыми, что оставляет шансы для восстановления ошибочно удаленного файла. Существует большое количество утилит для восстановления удаленных файлов FAT, выводящих пользователю список имен удаленных файлов с отсутствующим первым символом имени, затертым после освобождения записи. Очевидно, что надежно можно восстановить только файлы, которые были расположены в последовательных кластерах диска, так как при отсутствии связного списка выявить принадлежность произвольно расположенного кластера удаленному файлу невозможно (без анализа содержимого кластеров, выполняемого пользователем «вручную»).
Первый байт таблицы FAT называется "Описатель среды" (Media Descriptor). Он имеет такое же значение, как и байт-описатель среды, находящийся в загрузочном секторе логического диска.
Следующие 1,5 байта для 12-битового формата или 2 байта для 16-битового формат всегда содержат значение 0FFh.
Остальная часть таблицы FAT состоит из 12- или 16-битовых ячеек. Каждая ячейка соответствует одному кластеру диска. Эти ячейки могут содержать значения, приведенные в таблице 4.
Таблица 4.
FAT12 | FAT16 | Что означает |
000h | 0000h | Свободный кластер |
FF0h - FF6h | FFF0h - FFF6h | Зарезервированный кластер |
FF7h | FFF7h | Плохой кластер |
FF8h - FFFh | FFF8h - FFFFh | Последний кластер в списке |
002h - FEFh | 0002h - FFEFh | Номер следующего кластера в списке |
1. Форматируем USB-накопитель в файловой системе FAT16
Рис. 6. Форматирование
2. Создаем на USB-накопителе три текстовых документа:
1. 1.txt – Текст в кодировке Unicode
2. 2.txt – Текст в кодировке ANSI
3. 3.txt – Любой непустой документ
3. Удалим первые два файлы, тем самым освободив кластеры. При удалении документов кластеры помечаются как свободные, однако, их содержимое не очищается, и в них будут присутствовать символьные последовательности.
4.
Проверим содержимое USB-
Рис.
7. Содержимое USB-накопителя
Содержимое кластера 2 (1.txt)
Рис. 8. Содержимое файла 1.txt
На
рисунке 8 видно, что в кластере находится
текст в формате Unicode (Символ занимает
2 байта)
Содержимое кластера 3 (2.txt)
Рис. 9. Содержимое файла 2.txt
На
рисунке видно, что в кластере
находится текст в формате
ANSI (Символ занимает 1 байт)
Запускаем программу
Рис. 10. Окно программы после запуска
Для выбора диска необходимо воспользоваться командой Выбрать диск
Рис. 11. Окно выбора диска
После
выбора диска, для поиска свободных кластеров,
необходимо воспользоваться командой
Поиск свободных кластеров
Рис. 12. Процесс поиска
После поиска свободных кластеров
Рис. 13. Содержимое файла 1.txt
Список
свободных кластеров у которых контрольная
сумма не равна 0. То есть список свободных
но непустых кластеров. Содержимое кластера
2 при кодировке Unicode
Рис. 14. Содержимое файла 2.txt
Список свободных кластеров у которых контрольная сумма не равна 0. То есть список свободных но непустых кластеров. Содержимое кластера 3 при кодировке 1252 Западноевропейская (Windows)
В заключение данной курсовой работы необходимо отметить важность выполнения подобного рода заданий. При работе с такими заданиями необходимо детальное изучения вопроса, уяснения всех особенностей реализации программ по работе с дисками на логическом и физическом уровнях.
При разработке программы был выявлен ряд особенностей работы с дисками ПК: жесткими дисками, дискетами, флэш-накопителями. Главной особенностью является сложность прямого доступа к данным жесткого диска, а также данным, хранящимся на флэш-накопителях.
В развитии разработанной программы можно предложить реализацию работы с жесткими дисками в любых файловых системах, а также флэш-накопителями. Это серьезно расширит круг применения программного продукта.
Неоспоримым достоинством будет являться реализация в программе графического интерфейса пользователя (GUI). Это позволит более наглядно и привычно рядовому пользователю использовать все возможности программы.
Листинг модуля FAT_data.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.
using Microsoft.Win32.SafeHandles;
namespace HiddenLost
{
//Класс моделирующий файл в FAT16
public class FileFAT16
{
FileInfo _File;// Описатель файла
uint _SizeFile=0;//Размер файла
uint _SizeFileClusters=0;//Размер файла в кластерах
LogicalDrive _Disk;//Диск на котором находится файл
uint _Error=0;//Код ошибки
uint _PositionSector = 0;//Сектор в котором находится поле длины файла
uint _PositionByte = 0;//Смещение в катором находтся поле длины файла
public FileFAT16(FileInfo File, LogicalDrive Disk, uint BeginingDyrectory)
{
_File = File;//Сохранение описателя файла во внутренней переменной
_Disk = Disk;//Сохранение
диска во внутренней переменной
_SizeFile = (uint)_File.Length;//Получение длины файла