Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Открытие потока
1. Файл открывается. Это означает, что программа " захватывает" заданный по имени файл, сообщает Windows, что далее она будет с ним работать. Данный шаг нужен, чтобы не возникало конфликтов, когда несколько программ одновременно хотят записывать информацию в один и тот же файл. Правда, считывать данные из файла, очевидно, допустимо одновременно множеством программ, поэтому в операции открытия файла обычно уточняется, что файл открывается " на чтение" (считывание информации, которая не меняется) либо " на запись" (данные в файле модифицируются). 2. Ведется работа с файлом. Из него данные либо считываются, либо в него записываются. 3. Файл закрывается. После этой операции он снова доступен другим программам для обработки. Работа с потоком начинается с его открытия. Поток можно открыть для чтения и/или записи в двоичном или текстовом режиме. Функция открытия потока имеет формат: FILE* fopen(const char* filename, const char* mode); При успешном открытии потока функция возвращает указатель на предопределенную структуру типа FILE, содержащую всю необходимую для работы с потоком информацию, или NULL в противном случае. Первый параметр - имя открываемого файла в виде С-строки, второй - режим открытия файла: " r" - файл открывается для чтения; " w" - открывается пустой файл для записи (если файл существует, он стирается); " a" - файл открывается для добавления информации в его конец; " r+" - файл открывается для чтения и записи (файл должен существовать); " w+" - открывается пустой файл для чтения и записи (если файл существует, он стирается); Режим открытия может также содержать символы t (текстовый режим) или b (двоичный режим), отличающиеся обработкой символов перехода на новую строку. По умолчанию файл открывается в текстовом режиме, при котором комбинация символов " возврат каретки" и " перевод строки" (0x13 0x10) при вводе преобразуются в одиночный символ перевода строки (при выводе выполняется обратное преобразование). В двоичном режиме преобразования не выполняются. Пример: FILE *f = fopen(" d: \\cpp\\data.txt", " rb+"); Тогда команда открытия (создания пустого) файла запишется так: FILE * fo; Можно задать и полный путь к файлу, например: fo = fopen(" c: \\tmp\\test.txt", " wt"); Не забываем, что одиночный символ \ внутри строки Си задается двумя наклонными слэшами \\. Это частая ошибка. После открытия файла в файловую переменную fo занесется некоторое число. Если таким числом будет ноль, считается, что файл открыть не удалось. В Си нередки записи вида if( (fo=fopen(" c: \\tmp\\test.txt", " wt")) == 0) { где одновременно открывается файл и проверяется, успешно ли это сделано. Указатель fo используется в дальнейших операциях с потоком. Его передают функциям ввода/вывода в качестве параметра. При открытии потока с ним связывается область памяти, называемая буфером. При выводе вся информация направляется в буфер и накапливается там до заполнения буфера или до закрытия потока. Чтение осуществляется блоками, равными размеру буфера, и данные читаются из буфера. Существует пять предопределенных потоков, которые открываются в начале работы программы: стандартный ввод stdin, стандартный вывод stdout, стандартный вывод сообщений об ошибках stderr, стандартный дополнительный поток stdaux и стандартная печать stdprn.
|