freopen_s, _wfreopen_s

Перенесите указатель файла.Эти версии freopen, _wfreopen с усовершенствованиями безопасности, как описано в разделе Средства безопасности в CRT.

errno_t freopen( 
   FILE** pFile,
   const char *path,
   const char *mode,
   FILE *stream 
);
errno_t _wfreopen( 
   FILE** pFile,
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream 
);

Параметры

  • [исходящий] pFile
    Указатель на указатель файла, который будет предоставление вызов.

  • [входящий] path
    Путь к новому файлу.

  • [входящий] mode
    Разрешенный тип доступа.

  • [входящий] stream
    [in] Указатель на структуру FILE.

Возвращаемое значение

Каждая из этих функций возвращает код ошибки.При возникновении ошибки, исходный файл закрыт.

Заметки

Функция freopen_s закрывает файл в данный момент, связанный с объектом stream, заново назначать для них исполнителя stream в файл, указанный path._wfreopen_s версия юникод _freopen_s; аргументы path и mode в _wfreopen_s характерные черты.В остальных случаях поведение _wfreopen_s и _freopen_s идентично.

Если они есть из pFile, path, mode, stream или NULL либо если параметр path является пустой строкой, то эти функции вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров.Если среда выполнения может продолжить, это errno - к возвращенным функциям EINVAL и EINVAL.

Универсальное текстовое сопоставление функций

Функция TCHAR.H

неопределенные _UNICODE & _MBCS

определенные _MBCS

Определение _UNICODE

_tfreopen_s

freopen_s

freopen_s

_wfreopen_s

freopen_s обычно используется для перенаправления, раскрытые файлы stdin, stdout и stderr к файлам определенным пользователем.Новый файл, связанный с stream открывается с mode*,* в котором должна быть символьная строка, указывающая тип доступа требуемые для файла следующим образом:

  • "r"
    Открывает для чтения.Если файл не существует или не найдено, то вызов freopen_s завершается с ошибкой.

  • "w"
    Открывается пустой файл для записи.Если указанный файл существует, то его содержимое удаляется.

  • "a"
    Открывает для записи в конце файла (добавление) без удаления маркер конца файла) перед записью новых данных в файл; создает файл, если он не существует.

  • "r+"
    Будет открыт как для чтения, так и для записи.(Файл должен существовать).

  • "w+"
    Открывается пустой файл как для чтения, так и для записи.Если указанный файл существует, то его содержимое удаляется.

  • "a+"
    Открывает для чтения и добавить; при добавлении операция включает в себя удаление маркера конца файла) до новые данные записываются в файл и маркер конца файла) восстанавливается после завершения записи; создает файл, если он не существует.

Типы "w" и "w+" следует использовать с осторожностью, поскольку они могут удалить существующие файлы.

Когда файл открывается с типом метода доступа "a" или "a+", все операции записи выполняются в конце файла.Хотя указатель файла можно изменить с помощью fseek или rewind, указатель файла всегда перемещен обратно в конец файла, прежде чем записывают любые операции унесены.Таким образом, невозможно перезаписать существующие данные.

Режим "a" не удаляет маркер конца файла) перед добавлением в файл.После добавления выполняется команда ТИПА MS-DOS отображаются только данные до первоначальной разметки, не любых данных добавленных конца файла) к файлу.Режим "a+" удаляет маркер конца файла) перед добавлением в файл.После добавления команда ТИПА MS-DOS отображаются все данные в файле.Режим "a+" необходим для добавления в файл потока, завершен с маркером CTRL+Z конца файла).

Когда определено "r+","w+", или тип доступа "a+", и чтение и запись разрешены (считается, что будет открыт файл "для обновления").Однако при переходе от чтением и записью, должны быть в fsetpos, fseek или перемотать выполнение.Текущее положение можно задавать для операции fsetpos или fseek, при необходимости.Помимо вышеуказанным значений, один из следующих символов может быть включен в строке mode, чтобы указать режим перевода для новых линий.

  • t
    Открыть в режиме (переведенного текста); сочетания RETURN- перевода строки экипажа () CR-LF переведены в одиночные символы перевода строки (LF) на входе; Символы LF переведены в сочетаниями CR-LF на выходе.Также CTRL+Z, интерпретируется как символ конца файла на входе.В файлах открытых для чтения или для чтения и записи с "a+", библиотека времени выполнения проверяет CTRL+Z в конце файла и удалит его, если это возможно.Это сделано потому, что использовать fseek и ftell для перемещения в файле может вызвать fseek работать неправильно ближе к концу файла.Параметр t является расширением Майкрософт, не должно использоваться, переносимость ANSI пожелана.

  • b
    Открыть в бинарном (непреобразованный) режиме; вышеописанные переводы отключены.

Если t или b не дается в mode, то режим преобразования по умолчанию определяется глобальной переменной _fmode.Если t или b указывается буква к аргументу, функция завершается неудачей и возвращает NULL.

Обсуждение режимов текста и бинарный см. в разделе Вводом-выводом режима текста и бинарный.

Требования

Функция

Требуемый заголовок

freopen_s

<stdio.h>

_wfreopen_s

<stdio.h> или <wchar.h>

Консоль не поддерживается в приложениях Магазина Windows.Стандартные дескрипторы потока, связанные с консолью, stdin, stdout и stderr, необходимо перенаправить до функции C времени выполнения могут использовать их в приложениях Магазина Windows.Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Пример

// crt_freopen_s.c
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
 
#include <stdio.h>
#include <stdlib.h>

FILE *stream;

int main( void )
{
   errno_t err;
   // Reassign "stderr" to "freopen.out": 
   err = freopen_s( &stream, "freopen.out", "w", stderr );

   if( err != 0 )
      fprintf( stdout, "error on freopen\n" );
   else
   {
      fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );
      fprintf( stream, "This will go to the file 'freopen.out'\n" );
      fclose( stream );
   }
   system( "type freopen.out" );
}
  

Эквивалент в .NET Framework

См. также

Ссылки

Поток ВВОДА-ВЫВОДА

freopen, _wfreopen

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_open, _wopen

_setmode