Открытие потока в С++
Поток можно открыть для чтения и/или записи в двоичном или текстовом режиме. Функция открытия потока имеет формат:
Первый параметр — имя открываемого файла в виде С-строки, второй — режим открытия файла:
• "г" — файл открывается для чтения;
• "w" — открывается пустой файл для записи (если файл существует, он стирается);
• "а" — файл открывается для добавления информации в его конец;
• "г+" — файл открывается для чтения и записи (файл должен существо-вать);
• "W+" — открывается пустой файл для чтения и записи (если файл суще-ствует, он стирается);
• "а+" — файл открывается для чтения и добавления информации в конец.
Режим открытия может также содержать символы:
По умолчанию файл открывается в текстовом режиме, при котором комбинация символов «возврат каретки» и «перевод строки» (0x13 0x10) при вводе преобразуются в одиночный символ перевода строки (при выводе выполняется обратное преобразование). В двоичном режиме эти преобразования не выполняются.
Пример:
Чтение осуществляется блоками, равными размеру буфера, и данные читаются из буфера. Буферизация позволяет более быстро и эффективно обмениваться информацией с внешними устройствами.
Следует иметь в виду, что при аварийном завершении программы выходной буфер может быть не выгружен, и возможна потеря данных.
С помощью функций setbuf и setvbuf можно управлять размерами и наличием буферов.
Существует пять предопределенных потоков, которые открываются в начале работы программы:
• стандартный ввод stdin;
• стандартный вывод stdout;
• стандартный вывод сообщений об ошибках stderr;
• стандартный дополнительный поток stdaux;
• стандартная печать stdprn.
Первые три потока по умолчанию относятся к консоли. Эти указатели можно использовать в любой функции ввода/вывода там, где требуется указатель потока.
FILE* fopen(const char* filename, const char* mode);Если поток открылся, функция возвращает указатель на предопределенную структуру типа FILE, содержащую всю необходимую для работы с потоком информацию, или NULL в противном случае.
Первый параметр — имя открываемого файла в виде С-строки, второй — режим открытия файла:
• "г" — файл открывается для чтения;
• "w" — открывается пустой файл для записи (если файл существует, он стирается);
• "а" — файл открывается для добавления информации в его конец;
• "г+" — файл открывается для чтения и записи (файл должен существо-вать);
• "W+" — открывается пустой файл для чтения и записи (если файл суще-ствует, он стирается);
• "а+" — файл открывается для чтения и добавления информации в конец.
Режим открытия может также содержать символы:
t (текстовый режим); b (двоичный режим)Отличие в обработке символов перехода на новую строку.
По умолчанию файл открывается в текстовом режиме, при котором комбинация символов «возврат каретки» и «перевод строки» (0x13 0x10) при вводе преобразуются в одиночный символ перевода строки (при выводе выполняется обратное преобразование). В двоичном режиме эти преобразования не выполняются.
Пример:
FILE * f = fopen("d:\\cpp\\clata", "rb+");Указатель f используется в дальнейших операциях с потоком. Его передают функциям ввода/вывода в качестве параметра. При открытии потока с ним связывается область памяти, называемая буфером. При выводе вся информация направляется в буфер и накапливается там до заполнения буфера или до закрытия потока.
Чтение осуществляется блоками, равными размеру буфера, и данные читаются из буфера. Буферизация позволяет более быстро и эффективно обмениваться информацией с внешними устройствами.
Следует иметь в виду, что при аварийном завершении программы выходной буфер может быть не выгружен, и возможна потеря данных.
С помощью функций setbuf и setvbuf можно управлять размерами и наличием буферов.
Существует пять предопределенных потоков, которые открываются в начале работы программы:
• стандартный ввод stdin;
• стандартный вывод stdout;
• стандартный вывод сообщений об ошибках stderr;
• стандартный дополнительный поток stdaux;
• стандартная печать stdprn.
Первые три потока по умолчанию относятся к консоли. Эти указатели можно использовать в любой функции ввода/вывода там, где требуется указатель потока.