Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Открытие и закрытие файлов




Функция ftell

Функция

#include <stdio.h>

long int ftell(FILE *stream);

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

Значение, возвращаемое ftell, можно в дальнейшем использовать при вызове функции fseek.

Функция ftell возвращает положение указателя текущей позиции при успешном завершении. При ошибке возвращает-1L, и присваивает переменной errno положительное значение.

Пример:

#include<stdio.h>

 

int main(void)

{

FILE *stream;

stream = fopen("DUMMY.FIL","w+");

fprintf(stream,"Это тест");

printf("Указатель файла: %ld ",ftell(stream));

return 0;

}

9.2. Файловый ввод-вывод в языке С++

Функция Назначение
open Открывает файл для чтения/записи, связывая с ним объект класса filebuf
close Закрывает файл
setbuf   Передает указанный символьный буфер в распоряжение объекта класса filebuf
setmode   Задает режим доступа к файлу: двоичный (константа filebuf::binary) или текстовый (константа filebuf::text)
attach Связывает указанный открытый файл с объектом класса filebuf
rdbuf Возвращает указатель на объект класса filebuf
fd Возвращает дескриптор класса
is_open Проверяет, открыт ли файл, связанный с потоком

Для работы с файлами необходимо подключить библиотеку FSTREAM.H (которая в свою очередь подключает файл iostream.h).

Для чтения данных из файла используется класс ifstream, являющийся потомком класса istream. Для записи данных в файл используется класс ofstream, являющийся потомком класса ostream. Для чтения данных и записи из файла используется класс fstream. Конструктор каждого из этих классов автоматически создает объект класса filebuf, управляющий низкоуровневой работой с файлом, включая поддержку буфера чтения. Функции классов ifstream, ofstream и iofstream приведены в таблице.

Для открытия файла можно использовать конструкторы ifstream, ofstream или fstream.

Форма записи:

ИмяКласса ИмяОбъекта (СтрокаПутьФайл [, Флаг])

В качестве имени класса должен находиться любой класс, содержащий функции работы с файлами (например, ifstream или ofstream, istream или ostream, или fstream). В качестве ИмяОбъекта любой допустимый идентификатор. СтрокаПутьФайл представляет собой строку, содержащую информацию о месторасположении файла плюс его имя и расширение. При вводе имени файла с клавиатуры с указанием пути и расширения файла, если они требуются, данные вводятся в обычном виде, например: c:1date.txt

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

fstream f(“c:\1\date.txt”,ios::in);

ifstream fi(“c:\1\file1.doc”);

ofstream fo(“file2.in”);

наличие флага необязательно. Флаг используется, если необходимо изменить режим доступа к файлу.

 

Флаг Назначение
ios:: in ios::out ios::ate   ios::app ios::trunc   ios::nocreate ios::noreplace ios::binary Файл открывается для чтения, его содержимое не очищается Файл открывается для записи После создания объекта маркер текущей позиции устанавливается в конец файла Все выводимые данные добавляются в конец файла Если файл существует, его содержимое очищается (автоматически устанавливается при открытии файла для записи) Объект не будет создан, если файл не существует Объект не будет создан, если файл существует Файл открывается в двоичном режиме (по умолчанию – в текстовом)

Допускается объединение флагов с помощью операции побитового ИЛИ.

Пример:

ofstream fo1(“c:\file1.doc”, ios:: noreplace);

ofstream fо2(“file2.in”, ios::app| ios::nocreate);

В первом случае делается попытка создать объект fо1 и связать его с файлом file1.doc. Т.к. указан флаг ios:: noreplace, объект не будет создан, если файл существует, что предохраняет пользователя от нечаянного использования существующего файла для записи в него новых данных.

Во втором случае делается попытка создать объект fо2 и связать его с файлом file2.in. Т.к. указан флаг ios::nocreate, объект не будет создан, если файл не существует, а если он существует, то после создания объекта данные будут заносится в конец файла (при этом исходные данные, хранимые в этом файле не уничтожаются).

Для обмена данными с файлом можно использовать объект класса fstream.

Например:

fstream io(“fl.dat”,ios::in|ios::app);

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

Для закрытия файлов применяется метод close, который опорожняет поток и закрывает закрепленный за потоком файл.

Пример:

#include<iostream.h>

#include<fstream.h>

void main()

{

char name[12];

cout<<”Введите имя файла”<<endl;

cin>>name;

fstream f(name,ios::in);

if(f) cout<<”Файл открыт успешно”;

f.close();

}

Для открытия файлов можно использовать функцию open.

Пример:

#include<iostream.h>

#include<fstream.h>

void main()

{

fstream f;

char name[12];

cout<<”Введите имя файла”<<endl;

cin>>name;

f.open(name,ios::in);

if(f) cout<<”Файл открыт успешно”;

f.close();

}

Параметры, требуемые функцией open, имеют тот же смысл, что и параметры конструкторов потока.

Для записи данных в файл достаточно указать вместо потока cin имя объекта, связанного с файлом.

Пример:

#include<iostream.h>

void main()

{

char name[30];

cout<<”Введите имя файла:”<<endl;

cin>>name;

fstream f;

f.open(name, ios::out|ios::ate);

f<<”Добавляем запись”;

f.close();

}

Класс istream

Функции управления потоковым вводом сосредоточены в классе istream. С каждым из объектов этого класса и его производных связан объект класса streambuf. Функции класса istream, доступные его потомкам, перечислены в таблице.

 

Функция Назначение
ipfx   Вызывается перед операцией чтения для проверки наличия ошибок в потоке
isfx Вызывается после каждой операции чтения
get   Извлекает из потока требуемое число символов; если указан символ-ограничитель, он не извлекается
getline   Извлекает из потока требуемое число символов; если указан символ-ограничитель, он извлекается, но не сохраняется в буфере
read   Извлекает из потока требуемое число байтов; применяется при работе с двоичными потоками
istream& istream::ignore (int n, int d);   Выбрасывает из потока требуемое число символов вплоть до символа-ограничителя
int istream::peek(); Возвращает значение очередного символа, не извлекая его из потока
int istream::gcount()   Определяет число символов, извлеченных из потока во время последней операции чтения
eatwhite   Извлекает из потока ведущие пробельные символы; аналогичное действие выполняет манипулятор ws
istream& istream::putback (char ch); Возвращает в поток символы, извлеченные из него во время последней операции чтения
sync   Синхронизирует внутренний буфер потока с внешним источником символьных данных
istream& istream::seekg (streampos); istream& istream::seekg (streampoff,ios::seek_dir); Перемещает маркер, обозначающий текущую позицию чтения, на требуемую позицию в потоке
streampos istream::tellg() Возвращает позицию маркера чтения



Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 510; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.022 сек.