АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Создание, открытие, закрытие и удаление файлов

Читайте также:
  1. Ввод и удаление информации из ячеек
  2. Вопрос 72. Удаление главы МО в отставку
  3. Вставка и удаление строк и столбцов
  4. Выбор инструментов для анимации и преобразование форматов файлов.
  5. Дегазация — комплекс мероприятий, направленных на уничтожение (нейтрализацию) боевых отравляющих веществ или удаление их с зараженной поверхности.
  6. Добавление и удаление элементов диаграммы
  7. Добавление, удаление и изменение записей в справочнике
  8. Закрытие счетов 90, 91
  9. Закрытие ушей и сокращение прямой кишки
  10. Менеджер расширений: установка и удаление расширений
  11. Оптимальное удаление образующихся взвесей холодного сусла
  12. Осмотра помещений перед их закрытием по окончанию работы

Работа с файлами складывается из трех шагов.

1. Файл открывается. Это означает, что программа "захватывает" заданный по имени файл, сообщает Windows, что далее она будет с ним работать. Данный шаг нужен, чтобы не возникало конфликтов, когда несколько программ одновременно хотят записывать информацию в один и тот же файл. Правда, считывать данные из файла, очевидно, допустимо одновременно множеством программ, поэтому в операции открытия файла обычно уточняется, что файл открывается "на чтение" (считывание информации, которая не меняется) либо "на запись" (данные в файле модифицируются).
Операция открытия файла возвращает некий идентификатор (как правило, целое число), которое идентифицирует в программе в дальнейшем нужный открытый файл. Этот идентификатор запоминается в переменной; обычно такая переменная называется файловой переменной.

2. Ведется работа с файлом. Из него данные либо считываются, либо в него записываются.

3. Файл закрывается. После этой операции он снова доступен другим программам для обработки.

Стандартные операции работы с файлами, существующие практически во всех реализациях Си, хранятся в библиотеке stdio.h. Функция открытия файла называется fopen(). Она возвращает указатель на объект стандартного (определенного в данной библиотеке) типа FILE.
Параметров у функции fopen() два. Первый -- это путь к файлу (строка), второй -- параметры открытия файла.

Допустим, мы хотим создать в текущем каталоге проекта новый текстовый файл и записать в него два числа и строку. Пусть этот файл будет называться test.txt. Параметр открытия файла на запись в текстовом виде записывается строкой "wt". Буква w означает write (писать), буква t -- text (текст). Если такой файл в каталоге существует, он перезаписывается (все старое содержимое в нем уничтожается), если он не существует, то создается исходно пустым.

Тогда команда открытия (создания пустого) файла запишется так:

FILE * fo;
fo = fopen("test.txt","wt");

Можно задать и полный путь к файлу, например:

fo = fopen("c:\\tmp\\test.txt","wt");

Не забываем, что одиночный символ \ внутри строки Си задается двумя наклонными слэшами \\. Это частая ошибка.

После открытия файла в файловую переменную fo занесется некоторое число. Если таким числом будет ноль, считается, что файл открыть не удалось. В Си нередки записи вида

if((fo=fopen("c:\\tmp\\test.txt","wt")) == 0) {
// ошибка!
}

где одновременно открывается файл и проверяется, успешно ли это сделано.

Закрывается файл с помощью функции fclose():
fclose(fo);
После закрытия файла к файловой переменной обращаться уже нельзя.

Запись текстовой строки в файл выполняет функция fprintf():
fprintf(имя-файловой-переменной, формат, список-переменных-для-вывода);

Формат - это текстовая строка, задающая формат записываемого в файл текста. Все, что содержится в этой строке, пишется в файл один-в-один:

fprintf(fo, "Привет!");

В этом случае в файл запишется строка "Привет!", а так как никаких значений переменных в данном случае мы не выводим, то и список выводимых переменных отсутствует.

Чтобы вывести значение некоторой переменной, надо использовать элемент формата, который начинается с символа %. Так, формат %d задает вывод целочисленного значения, формат %s - вывод строки.
Например:

int n = 10;
char str[20] = "значение переменной n равно ";
fprintf(fo, "Вывод: %s %d", str, n);

В файл запишется строка ""Вывод: значение переменной n равно 10". Вместо формата %s подставлено значение переменной str, а вместо формата %d - значение переменной n.

Для вывода дробных чисел используют формат %f, где перед f ставят число всех выводимых символов и число символов после запятой, разделенные точкой. Например: "%5.2f" означает вывод числа из пяти позиций, причем две из них будут отведены для дробного значения. Если оно не уместится в этих позициях, то вылезет за границу, а если займет меньше, то дополнится пробелами (хотя в разных реализациях может быть по разному).

Следующая программка записывает в файл 100 строк с числами. Результирующий файл будет текстовым, его можно открыть и просмотреть, например, в Блокноте.

FILE * fo;
fo = fopen("test.txt","wt");
int i;
for(i=0; i<100; i++) {
fprintf(fo, "%d\n", i);
}
fclose(fo);

Комбинация символов "\n" в конце строки формата означает перевод на новую строку в выводимых текстовых данных.

Для ввода данных (текстовой строки) используют функцию fscanf(). Она напоминает fprintf():

fscanf(файловая-переменная, формат-ввода, список-адресов-переменных)

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

Операция &, примененная к имени переменной, возвращает адрес этой переменной в памяти. Тогда операцию ввода числа из текстового файла fi в целочисленную переменную n можно записать так:

fscanf(fi, "%d", &n);

Формат записывается также, как и в случае с fprintf, а вот перед именем переменной n дополнительно указывается операция получения адреса &.

Полезная функция feof(файловая-переменная) возвращает 1 (истинное значение), если файл, открытый для считывания, закончился. Она возвращает 0, если из файла еще можно продолжать ввод.

Программа считывания из файла всех строк с числами запишется так:

FILE * fi;
fi = fopen("test.txt","rt"); // rt означает открытие текстового файла на
чтение
int n;
while(!feof(fi)) {
fscanf(fi, "%d", &n);
}
fclose(fi);

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)