File (Методичка С++), страница 2

2013-09-07СтудИзба

Описание файла

Файл "File" внутри архива находится в папке "METODY". Документ из архива "Методичка С++", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика" в общих файлах.

Онлайн просмотр документа "File"

Текст 2 страницы из документа "File"

Закрытие файла.

Закрытие файла, открытого для записи или чтения можно закрыть процедурой

CLOSE(<файловая переменная >);

При этом, вновь созданный файл регистрируется в каталоге. Так как любое обращение к диску осуществляется через буферную память, часть информации при обмене может остаться в буфере. Поэтому процедура закрытия файла обеспечивает дозапись оставшейся информации из буфера. Связь с файлом файловой переменной сохраняется. и при повторном использовании этого же файла применять процедуру ASSIGN еще раз не требуется.

Переименование файла.

Любой существующий файл можно переименовать, используя процедуру

RENAME(<файловая переменная >,<новое имя >);

Если в процессе работы программы требуется переименовать файл, открытый для чтения или записи, необходимо предварительно закрыть этот файл. При совпадении нового имени файла с каким-либо уже существующим выдается сообщение об ошибке.

Удаление файла.

Уже созданный или находящийся в процессе формирования файл может быть уничтожен с помощью процедуры

ERASE(<файловая переменная >);

Перед уничтожением файл должен быть закрыт, так как удаляются только закрытые файлы.

Определение конца файла.

Как было отмечено, размер файла при его заранее не определяется. Поэтому в процессе работы требуется проверка достижения конца файла. Это позволяет определить логическая функция, тестирующая конец файла

EOF(<файловая переменная >);

Функция принимает значение TRUE если указатель стоит на конце файла (после последней записи). При этом, если ведется чтение то такое значение функции означает, что файл исчерпан, а если идет запись, то она происходит в конец файла. Функция принимает значение FALSE, если конец файла при проверке еще не достигнут.

Получение информации об операции ввода-вывода

Система ввода-вывода регистрирует правильность выполнения ошибок операций работы с файлами. Эта информация может быть получена и обработана пользователем в режиме компилятора {$I-} (отключение контроля ввода-вывода) с помощью функции

IORESULT.

В качестве своего результата функция возвращает значение типа word, содержащее 0, если операция была успешной, и равная коду ошибки, если таковая произошла (приложение 1).

Процедуры работы с каталогами.

В соответствии с файловой системой, имя каталога входит в идентификацию файла, поэтому Турбо-Паскаль имеет средства для создания, уничтожения и других действий с каталогами.

  1. CHDIR(<путь>) - процедура изменения текущего каталога. Устанавливает каталог, указанный параметром «путь».

  2. GETDIR(<устройство>,<каталог>) - процедура позволяет определить имя текущего каталога на указанном устройстве.

<устройство> - 0- устройство по умолчанию;

1 - диск А;

2 - диск В.

<каталог> - переменная типа string, которая передает путь к текущему каталогу.

  1. MKDIR(<каталог>) - процедура создает новый каталог, где «каталог» содержит путь и новое имя.

  2. RMDIR(<каталог>) - процедура удаляет каталог с указанным именем. Каталог должен быть пустым.

  • Пример 2-3. Использование стандартных процедур при создании резервной копии.

program copir;

var fi,fo:text;{ файл ТИПА text }

k,i:word;

name, ; { имя файла для которого создается копия }

name_bak,s: string; ; { имя для копии файла }

const bak='.bak';

begin

writeln(' введите имя файла для редактирования');

readln(name);

k:=pos('.',name); { длина имени с точкой - <имя>.}

if k=0 then k:=length(name)+1; { длина имени без расширения - <имя> + ' '}

{формируем новое имя <имя>.BAK ,убрав точку или пробел}

name_bak:=copy(name,1,k-1)+bak;

assign(fi,name);

{$I-} reset(fi);{$I+} { проверка наличия файла с именем name}

if ioresult <> 0 then begin

writeln(#7,' нет файла с именем ',name);halt;

end;

close(fi);

assign(fo,name_bak); { проверка наличия файла с именем name_bak}

{$I-} reset(fo);{$I+}

if ioresult = 0 then begin

writeln(#7,' файл с именем ',name_bak,' есть ');

close(fo); { удаление файла с именем name_bak}

erase(fo) end;

rename(fi,name_bak); { создание резервной копии}

reset(fi);

assign(fo,name);

rewrite(fo);

while not eof(fi) do { пока не конец файла}

begin

readln(fi,s);

writeln(fo,s); { в этой точке возможен вызов процедуры редактирования файла }

end;

close(fi);

close(fo)

end.

2.3.Процедуры и функции из библиотеки DOS для работы с файлами

Borland Pascal предоставляет пользователю возможность воспользоваться процедурами и функциями библиотеки DOS. Для этого необходимо в начале программы подключить библиотеку с помощью директивы USES DOS, чтобы сделать доступными ее компоненты, представленные в этом разделе.

  1. Функция DISKFREE(<диск>); определяет и возвращает объем свободного места на указанном диске в байтах . Тип результата LONGINT.

Параметр функции <диск> может принимать значение:

0 - устройство по умолчанию:

1 - диск А:

2 - диск В:

-1 - не существующий диск.

  1. Функция DISKSIZE(<диск >): возвращает полный объем указанного диска в байтах. Параметр <диск > принимает такое значение, как и в предыдущей функции.

  2. Процедура GETTIME(<файловая переменная>,<время>); возвращает время создания или последнего обновления файла

<время> - переменная типа LONGINT, в которой возвращается время в упакованном формате для файла, определенного в параметре <файловая переменная>.

  1. Процедура UNPACKTIME(<время>,<дата>); позволяет распаковать параметр <время>, представленный в виде целого числа LONGINT, в тип DATATAPE, который описан в модуле следующим образом:

Type DATATAPE = record

year : word; {19xx}

month: word; {1..12}

day: word; {1..31}

hair: word; {0..23}

min: word; {0..59}

sec: word; {0..59}

end;

Этот формат представляет время в привычном для пользователя виде.

  1. Процедура SETFTIME(<файловая переменная>,<время>) используется для установки новой даты создания или обновления файла, описываемого файловой переменной.

  2. <время> время и дата для установки в упакованном формате, представленные в виде целого числа LONGINT.

  3. Процедура PACKTIME(<дата>,<время>) позволяет упаковать параметр <дата>, представленный в виде, привычном для пользователя, и описанный с помощью переменной типа DATATAPE в целое число LONGINT, присваиваемое параметру <время>.

  4. Процедура GETFATTR(<файловая переменная>,<атрибуты>) применяется для получения атрибутов файла, указанного файловой переменной.

<атрибуты> переменная типа WORD, в младшем байте которого возвращаются атрибуты файла. Для расшифровки байта атрибутов в модуле описана константа следующего содержания:

Const Readonly = $01; только чтение

Hidden = $02; скрытый файл

Sysfile = $04; системный файл

VolumeID =$08; идентификатор тома

Duirectory = $10; имя подкаталога

Archive = $20; архивный файл

Anyfile = $3F; любой файл

Комбинация битов в байте может указывать самые разные варианты.

Процедура SETFATTR(<файловая переменная>,<атрибуты>) служит для установки атрибутов файла указанного файловой переменной.

<атрибуты> переменная типа WORD, в младшем байте которого передаются процедуре атрибуты файла.

  1. Функция FSEARCH(<имя>,<список каталогов>) Ищет файл в списке каталогов.

<имя> - имя отыскиваемого файла ( строковое выражение типа PATCHSTR=STRING[79] ; имени может предшествовать путь).

<список каталогов> - список каталогов, в которых ищется файл ( строковая переменная типа STRING ) ; имена каталогов разделяются запятой.

Результат поиска возвращается в виде строки типа PATCHSTR=STRING[79]. В строке содержится путь и имя файла, если поиск был успешным. В противном случае возвращается пустая строка.

  1. Функция FSPLIT(<файл>,<путь >,<имя>,<расширение>) применяется для расщепления имени файла, т. е. Возвращает в качестве отдельных параметров путь к файлу, его имя и расширение;

<файл> - строковое выражение, содержащее спецификацию файла

<путь> - переменная типа PATCHSTR=STRING[67], в котором возвращается путь к файлу;

<имя> - переменная типа PATCHSTR=STRING[8], в котором возвращается имя файла;

<расширение> - переменная типа PATCHSTR=STRING[4], в котором возвращается расширение с предшествующей ему точкой;

Процедура не проверяет наличие на диске указанного файла. В качестве входного параметра может использоваться переменная типа PATCHSTR=STRING[79].

  1. Функция FEXPAND(<файл>) применяется для дополнения файлового имени до полной спецификации (с указанием устройства и пути);

<файл> - строковое выражение или переменная типа PATCHSTR.

Функция не проверяет наличие файла на диске, а просто дополняет имя файла недостающими параметрами. Результат возвращается в строке типа PATCHSTR=STRING[79].

  • Пример 2-4. Использование процедур и функций DOS.

program fundos; { проверка функций библиотеки dos}

uses dos,crt;

const name:string='c:\tanya\pasc\filezap\pr.rez';

var fi,fo:text;{ файл ТИПА text }

k,i:word;time,size:longint; {переменные для хранения времени и размеров}

date:datetime; {переменные для преобразования даты}

pathf:dirstr; { описываются как стандартные типа модуля dos }

namef:namestr;

extf:extstr;

atr:byte; {переменные для хранения байта атрибутов файла}

begin

clrscr;

writeln(' введите имя файла для работы ');

readln(name);

assign(fi,name);

{$I-} reset(fi);{$I+} { проверка наличия файла с именем name}

if ioresult <> 0 then begin

writeln(#7,' нет файла с именем ',name);halt;

end;

getftime(fi,time); {процедура определения даты создания файла}

unpacktime(time,date); {процедура преобразования даты в понятный вид}

writeln('дата создания файла =',date.year:5,date.month:3,date.day:3);

writeln('время создания файла =',date.hour:3,date.min:3,date.sec:3);

with date do begin

year:=1998;

month:=7;

day:=31

end;

packtime(date,time); {упаковка даты для внесения изменений в тип longint }

setftime(fi,time); {установка новой даты создания или корректировки файла}

writeln(' после установки новой даты ');

writeln('дата создания файла =',date.year:5,date.month:3,date.day:3);

writeln('время создания файла =',date.hour:3,date.min:3,date.sec:3);

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5193
Авторов
на СтудИзбе
434
Средний доход
с одного платного файла
Обучение Подробнее