
- •Работа с файловой системой
- •Содержание
- •1. Цель работы
- •2. Порядок выполнения работы
- •3. Структура каталогов файловых систем fat и vfat
- •Структура элемента каталога fat в Windows
- •Структура элемента каталога с длинным именем
- •4. Работа с файловой системой
- •4.1. Создание, открытие, чтение и запись в файл
- •4.2. Поиск файлов в dos
- •4.3. Поиск файлов в Windows
- •4.4. Опрос и изменение свойств файлов
- •4.4.1. Атрибуты
- •4.4.2. Дата и время последней модификации
- •4.5. Перемещение и удаление файлов
- •4.6. Работа с каталогами
- •5. Работа с параметрами командной строки
- •6. Пример
- •Текст программы
- •Библиографический список
- •Поиск файлов по дереву каталогов
- •Варианты заданий
Библиографический список
Финогенов К.Г. Самоучитель по системным функциям MS-DOS. – М.: Энтроп, 1999. – 383 с.
Зубков С.В. Assembler для DOS, Windows и UNIX. – М.: Изд-во ДМК, 1999. – 640 с.; 2000. – 608 с.
Приложение 1
Поиск файлов по дереву каталогов
Приведенный алгоритм позволяет вести поиск файлов по маске на текущем диске или в текущем каталоге и его подкаталогах.
В алгоритме используются обозначения: Level – уровень вложенности подкаталогов (у каталога, с которого поиск начинается, Level=0, у его подкаталогов Level=1 и т.д.), N – количество уже пройденных подкаталогов на текущем уровне вложенности.
Просмотр дерева каталогов ведется в следующей последовательности: 1) в просматриваемом каталоге ищутся файлы по маске. После того, как подходящие файлы закончились, переход к этапу 2) поиск вложенных подкаталогов по маске «*». Находится подкаталог, который еще не был просмотрен, и этапы 1-2 повторяются в нём. Когда на текущем уровне вложенности подкаталогов нет (добрались до низа дерева), или все подкаталоги уже просмотрены, происходит переход на один уровень вверх, в родительский каталог, где выполняется этап 2.
Число просмотренных подкаталогов N для каждого уровня запоминается в стеке. На дне стека – значение N для уровня Level=0, над ним – для Level=1, и т.д.
На этапе поиска подкаталогов первые два поиска возвращают ссылки на каталоги с именами «.» и «..». Чтобы их пропустить, при первом просмотре подкаталога устанавливается начальное N=2.
Приложение 2
Варианты заданий
Подсчитать размер, который занимает группа файлов, заданная по маске. Маска передается в командной строке, и может содержать путь к каталогу. Результаты вывести на экран.
Подсчитать количество 512-байтовых секторов, занимаемых файлами, маска которых передается в командной строке и может содержать путь к каталогу. Результаты вывести на экран.
Подсчитать размер всех файлов текущего каталога и его подкаталогов, вывести на экран округленным в Кбайтах. Объем, занимаемый самими подкаталогами, не учитывать.
Подсчитать количество 512-байтовых секторов, занимаемых файлами текущего каталога и его подкаталогов. Результаты вывести на экран. Сектора, занимаемые самими подкаталогами, не учитывать.
В файл отчета, имя которого передается программе в командной строке, записать информацию о файлах текущего каталога: имя и размер в Кбайтах.
В файл отчета, имя которого предопределено в программе, записать информацию (имя и размер в байтах) о файлах текущего каталога, заданных по маске. Маска передается в командной строке.
В файл отчета, имя которого передается программе в командной строке, записать информацию о файлах текущего каталога: имя, дату создания и атрибуты.
Записать в файл отчета, имя которого передается в командной строке, информацию о файле текущего каталога, имеющем максимальный размер: имя, атрибуты, размер, дату/время создания, последнего доступа и модификации.
Записать в файл отчета, имя которого передается в командной строке, информацию о файлах текущего каталога, созданных или измененных в течение трех последних дней. Информация включает имя, дату и время.
Вывести на экран список полных имен файлов, созданных или модифицированных за последние 2 дня. Поиск вести в текущем каталоге и в его подкаталогах.
В текстовом файле, имя которого передается в командной строке, перечислены полные имена файлов, по одному в строке. Дописать в тот же файл напротив каждого имени атрибуты, дату создания и размер соответствующего файла.
В файл отчета с именем REPORT.TXT записать полные имена файлов диска С:, заданных по маске. Маска передается в командной строке.
У файлов, перечисленных в командной строке через запятую, установить атрибут «только для чтения». Если какой-либо из файлов не существует, вывести сообщение.
В файл REPORT.TXT записать полные имена скрытых файлов текущего диска.
В файл отчета записать имена файлов текущего каталога, имеющих установленный атрибут. Обозначение атрибута и имя файла отчета передаются в командной строке.
Подсчитать количество файлов с атрибутом «архивный» в текущем каталоге и его подкаталогах. Результат вывести на экран.
Подсчитать суммарный размер файлов текущего каталога с атрибутами, комбинация которых передается в командной строке. Результаты записать в файл отчета. Его имя задается в программе.
У файлов, заданных по маске в командной строке, изменить дату последней модификации на сегодняшнюю. Маска может содержать путь.
В файл отчета записать имена и даты файлов текущего каталога, созданных в интервал времени, который указан в командной строке. Имя файла-отчета задается в программе.
Присоединить содержимое файла, следующего вторым в командной строке, к содержимому первого из файлов. Если операцию невозможно выполнить, вывести сообщение о причине. Полные имена файлов могут содержать путь.
Создать на диске текстовый файл. Файл заполняется строками, вводимыми с клавиатуры. Имя файла передается в командной строке, может содержать путь. Если файл с указанным именем уже существует, выводится сообщение об ошибке. Если путь не найден, предлагается создать новые каталоги.
Скопировать файл, имя которого передается в командной строке, в файл с именем COPY.*. У исходного файла установить атрибут «только для чтения».
В командной строке программы передается имя текстового файла. Подсчитать количество слов в файле и вывести значение на экран.
В командной строке программы передаются имена двух текстовых файлов. Скопировать из первого файла во второй строки длиной не более 10 символов.
В командной строке передается путь к каталогу. Удалить этот каталог и все его содержимое. Если путь указан неверно – сообщение об ошибке. Если каталог не пуст или содержит файлы с атрибутом «только для чтения» – запрашивать подтверждение на удаление.
Удалить файлы по маске, указанной в командной строке. Маска может содержать путь к каталогу. Если файл содержит атрибут «только для чтения» вывести его имя на экран и не удалять.
Программе в командной строке передается имя текстового файла, каждая строка которого содержит путь и имя файла. Удалить перечисленные файлы. Файлы с атрибутом «только для чтения» удалять после подтверждения пользователя.
Программе в командной строке передаются два параметра: имя текстового файла, каждая строка которого содержит путь и имя файла, и путь к каталогу, куда их требуется переместить. Файлы с атрибутом «только для чтения» также подлежат перемещению с сохранением своих атрибутов.
Программе в командной строке передаются два параметра: маска файлов текущего каталога и путь к каталогу, куда эти файлы требуется переместить.
Программе в командной строке передаются два параметра: маска файлов текущего каталога и путь к каталогу, куда эти файлы требуется скопировать.
* В формате Windows дата/время выражается в 100-наносекундных интервалах относительно 1 января 1601 года. В формате DOS младшее слово – время создания, старшее слово – дата создания, следующие 4 байта не используются.