Потоковый ввод-вывод
Эти функции обрабатывают данные разных размеров и форматов, от одного символа до больших структур данных. Они также предоставляют возможность буферизации, которая может повысить производительность. Размер буфера потока по умолчанию 4K. Эти процедуры влияют только на буферы, созданные процедурами библиотеки времени выполнения, и не затрагивают буферы, созданные операционной системой.
Потоковые процедуры ввода и вывода
Подпрограмма |
Применение |
Эквивалент в .NET Framework |
---|---|---|
Очистить индикатор ошибки для потока |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Закрыть поток |
System::IO::Stream::Close, System::IO::BinaryReader::Close, System::IO::BinaryWriter::Close, System::IO::TextReader::Close, System::IO::TextWriter::Close, System::IO::StringReader::Close, System::IO::StringWriter::Close, System::IO::StreamReader::Close, System::IO::StreamWriter::Close |
|
Закрыть все открытые потоки, кроме stdin, stdout и stderr |
System::IO::Stream::Close, System::IO::BinaryReader::Close, System::IO::BinaryWriter::Close, System::IO::TextReader::Close, System::IO::TextWriter::Close, System::IO::StringReader::Close, System::IO::StringWriter::Close, System::IO::StreamReader::Close, System::IO::StreamWriter::Close |
|
Связать поток с файловым идентификатором для открытия файла |
||
Проверить на конец файла или потока |
||
Проверить на наличие ошибки в потоке |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Сбросить поток в буфер или на запоминающее устройство |
||
Считать символ из потока (функциональные версии getc и getwc) |
||
Считать символ из stdin (функциональные версии getchar и getwchar) |
||
Получить положение индикатора в потоке |
||
Считать строку из потока |
System::IO::StreamReader::ReadLine, System::IO::TextReader::ReadBlock |
|
Получить идентификатор файла, связанный с потоком |
||
Сбросить все потоки в буфер или запоминающее устройство |
System::IO::FileStream::Flush, System::IO::StreamWriter::Flush, System::IO::TextWriter::Flush, System::IO::BinaryWriter::Flush |
|
Открыть поток |
||
fprintf, _fprintf_l, fwprintf, _fwprintf_l, fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l |
Записать форматированные данные в поток |
|
Записать символ в поток (функциональные версии putc и putwc) |
||
Записать символ в stdout (функциональные версии putchar и putwchar) |
||
Записать строку в поток |
||
Считать неформатированные данные из потока |
||
Переопределить указатель потока FILE, чтобы он указывал на новый файл или устройство |
||
fscanf, fwscanf, fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l |
Считать форматированные данные из потока |
System::IO::StreamReader::ReadLine; дополнительно ознакомьтесь с методами Parse, например System::Double::Parse. |
Переместить указатель файла в заданное место |
System::IO::FileStream::Position, System::IO::FileStream::Seek |
|
Установить положение индикатора в потоке |
||
Открыть поток с совместным доступом к файлу |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Получить текущее положение в файле |
||
Записать неформатированные элементы данных в поток |
||
Считать символ из потока (версии-макросы fgetc и fgetwc) |
||
Считать символ из stdin (версии-макросы fgetchar и fgetwchar) |
||
Возвращает количество одновременно открытых файлов, допустимое на уровне потокового ввода-вывода. |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Считать строку из stdin |
||
Считать двоичный int из файла |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
printf, _printf_l, wprintf, _wprintf_l,printf_s, _printf_s_l, wprintf_s, _wprintf_s_l |
Записать форматированные данные в stdout |
|
Записать символ в поток (версии-макросы fputc и fputwc) |
||
Записать символ в stdout (версии-макросы fputchar и fputwchar) |
||
Записать строку в поток |
||
Записать двоичный int в поток |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Переместить указатель файла на начало потока |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Удалить временные файлы, созданные tmpfile |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
scanf, _scanf_l, wscanf, _wscanf_l,scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l |
Считать форматированные данные из stdin |
System::Console::ReadLine; также ознакомьтесь с методами Parse, например System::Double::Parse. |
Управлять потоковой буферизацией |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Задать максимальное число одновременно открытых файлов на уровне потокового ввода-вывода. |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Управлять потоковой буферизацией и размером буфера |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
_snprintf, _snwprintf, _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l |
Записать форматированные данные указанной длины в строку |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
_snscanf, _snwscanf, _snscanf_s, _snscanf_s_l, _snwscanf_s, _snwscanf_s_l |
Читают форматированные данные указанной длины из стандартного входного потока. |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
sprintf, swprintf, sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l |
Записать форматированные данные в строку |
|
sscanf, swscanf, sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l |
Считать форматированные данные из строки |
См. методы Parse, такие как System::Double::Parse |
Создать временное имя файла в данном каталоге |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Создать временный файл |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Создать временное имя файла |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
Отправить символ обратно в поток |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
|
_vcprintf, _vcwprintf, _vcprintf_s, _vcprintf_s_l, _vcwprintf_s, _vcwprintf_s_l |
Записать форматированные данные на консоль. |
|
vfprintf, vfwprintf, vfprintf_s, _vfprintf_s_l, vfwprintf_s, _vfwprintf_s_l |
Записать форматированные данные в поток |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
vprintf, vwprintf, vprintf_s, _vprintf_s_l, vwprintf_s, _vwprintf_s_l |
Записать форматированные данные в stdout |
|
_vsnprintf, _vsnwprintf, vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l |
Записать форматированные данные указанной длины в буфер |
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода. |
vsprintf, vswprintf, vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l |
Записать форматированные данные в буфер |
Когда программа начинает выполнение, код запуска автоматически открывает несколько потоков: стандартный ввода (указанный в stdin), стандартный вывода (указанный в stdout) и стандартный вывода ошибок (указанной в stderr). Эти потоки направляются на консоль (клавиатуру и экран) по умолчанию. Используйте freopen для перенаправления stdin, stdout или stderr к дисковому файлу или устройству.
Файлы, открытые с помощью процедуры потока буферизуются по умолчанию. Функции stdout и stderr сбрасываются, когда они полны или, при записи в символьное устройство, после каждого вызова библиотеки. Если программа завершается ненормально, буферы вывода не могут быть сброшены, что приводит к потере данных. Используйте fflush или _flushall, чтобы гарантировать, что буфер, связанный с заданным файлом или все открытые буферы сброшены операционной системе, которая может кэшировать данные перед записью их на диск. Функция фиксации на диск гарантирует, что сброшенное содержимое буфера не потеряется в случае сбоя системы.
Существует два способа сохранить содержимое буфера на диск:
Скомпонуйте с файлом COMMODE.OBJ, чтобы установить глобальный флаг фиксации. Параметр по умолчанию глобального флага — n, означающий "не фиксировать".
Установите флаг в c для fopen или _fdopen.
Любой файл, открытый с флагом c или n ведет себя в соответствии со значением флага, независимо от состояния глобального флага фиксации.
Если программа не закрывает поток явно, поток автоматически закроется, когда завершится выполнение программы. Однако необходимо закрывать поток, когда программа завершает работу с ним, так как число потоков, которые могут быть открыты одновременно, ограничено. Дополнительные сведения об этом ограничении смотрите в разделе _setmaxstdio.
Ввод может следовать сразу за выводом только с использованием между ними вызова fflush или функции позиционирования файлов (fseek, fsetpos или rewind). Вывод может следовать за вводом без дополнительного вызова функции позиционирования файла, если операция ввода встречает конец файла.