русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Файлы и потоки


Дата добавления: 2015-06-12; просмотров: 512; Нарушение авторских прав


Ниже приведена программа копирования одного файла в другой. Имена файлов берутся из командной строки программы:

#include <fstream.h>

#include <libc.h>

 

void error(char* s, char* s2 ="")

{

cerr << s << ' ' << s2 << '\n';

exit(1);

}

 

int main(int argc, char* argv[])

{

if (argc != 3) error("wrong number of arguments");

ifstream from(argv[1]);

if (!from) error("cannot open input file",argv[1]);

ostream to(argv[2]);

if (!to) error("cannot open output file",argv[2]);

char ch;

while (from.get(ch)) to.put(ch);

if (!from.eof() || to.bad())

error("something strange happened");

return 0;

}

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

По умолчанию ifstream всегда открывается на чтение, а ofstream открывается на запись. В ostream и в istream можно использовать необязательный второй аргумент, указывающий иные режимы открытия:

class ios {

public:

//...

enum open_mode {

in=1, // открыть на чтение

out=2, // открыть как выходной

ate=4, // открыть и переместиться в конец файла

app=010, // добавить

trunc=020, // сократить файл до нулевой длины

nocreate=040, // неудача, если файл не существует

noreplace=0100 // неудача, если файл существует

};

//...

};

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



void f()

{

ofstream mystream(name,ios::out|ios::nocreate);

if (ofstream.bad()) {

//...

}

//...

}

Также можно открыть файл сразу на чтение и запись:

fstream dictionary("concordance", ios::in|ios::out);

Все операции, допустимые для ostream и ostream, можно применять к fstream. На самом деле, класс fstream является производным от iostream, который является, в свою очередь, производным от istream и ostream. Причина, по которой информация по буферизации и форматированию для ostream и istream находится в виртуальном базовом классе ios, в том, чтобы заставить действовать всю эту последовательность производных классов. По этой же причине операции позиционирования в istream и ostream имеют разные имена - seekp() и seekg(). В iostream есть отдельные позиции для чтения и записи.



<== предыдущая лекция | следующая лекция ==>
Манипуляторы | Закрытие потоков


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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