freopen, _wfreopen

重新分配一个文件指针。这些功能的更安全版本可用;请参见 freopen_s, _wfreopen_s

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

参数

  • path
    新文件路径。

  • mode
    允许的访问类型。

  • stream
    为 FILE 结构的指针。

返回值

这些函数都返回一个指向新打开的文件。如果发生错误,原始文件已关闭,并且该函数返回 NULL 指针值。如果 path、mode或 stream 是 null 指针,或者,如果 filename 是空字符串,这些函数调用的参数无效处理程序,如 参数验证所述。如果执行允许继续,对 EINVAL 的这些功能集 errno 和返回 NULL。

请参见 _doserrno、errno、_sys_errlist 和_sys_nerr 有关这些内容的更多信息以及其他情况下,错误代码。

备注

这些功能的更安全版本存在,请参见 freopen_s,_wfreopen_s

freopen 功能关闭文件当前与 stream 和重新 stream 到 path指定的文件*。*_wfreopen 是 _freopen的宽字符版本;为 _wfreopen 的 path 和 mode 参数是宽字符字符串。_wfreopen 和 _freopen 否则具有相同的行为。

一般文本例程映射

TCHAR.H 实例

未定义的_UNICODE & _MBCS

定义的_MBCS

定义的_UNICODE

_tfreopen

freopen

freopen

_wfreopen

freopen 通常用于重定向之前打开的文件 stdin、stdout和 stderr 定向到用户指定的文件。新的文件与 stream 如下打开与 mode*,* 是指定的访问类型字符字符串请求文件,例如:

  • "r"
    用于读取打开。如果文件不存在或无法找到,freopen 调用失败。

  • "w"
    打开要编写的空文件。如果给定文件存在,销毁其内容。

  • "a"
    为编写打开隐藏文件 (追加) 结束时,如果不移除 EOF 标记在编写新数据之前到文件中;,如果不存在,则先创建文件。

  • "r+"
    用于读取和写入打开。(文件必须存在。)

  • "w+"
    打开读取和写入的空文件。如果给定文件存在,销毁其内容。

  • "a+"
    用于读取和追加打开,追加的操作包括 EOF 标记中删除,新的数据写入文件之前,然后恢复 EOF 标记,在编写完成之后;,如果不存在,则先创建文件。

谨慎使用 "w" 和 "w+" 类型,因此,它们可能损坏现有文件。

当文件打开与 "a" 或 "a+" 访问类型时,所有写入操作发生在文件末尾。使用 fseek 或 rewind,虽然文件指针可以被重新定位,文件指针总是移回文件的末尾,在所有写入操作之前。因此,现有数据无法重写。

"a" 模式不在追加前移除 EOF 添加到文件。在追加发生后,MS-DOS 类型命令只显示数据到原始 EOF 标记和没有任何数据追加到文件。"a+" 模式在追加前移除 EOF 添加到文件。在追加后,MS-DOS 类型命令文件中显示所有数据。"a+" 模式对于追加需要于停止点与 CTRL+Z EOF 标记的流文件。

当 "r+"、"w+"或 "a+" 访问类型指定,时读取和写入允许 (文件被视为打开“更新”)。但是,那么,当您在读取和写入之间切换,必须有介入的 fsetposfseek倒带 操作。如果需要当前位置可用于 fsetpos 或 fseek 操作指定。除了上面的值,以下字符之一。mode 字符串可以包含为新行指定特定模式。

  • t
    打开在文本 (转换) 模式;支持返回换行符 (CR-LF) 组合转换为输入的唯一换行符 (LF) 字符;LF 字符转换为输出中 CR-LF 组合。此外,CTRL+Z 被解释为编码的文件结尾字符。如果可能在用于编写和读取打开的用于读取或文件与 "a+",运行库检查 CTRL+Z 在文件末尾并将其移除。因为使用 fseek 和 ftell 在文件中移动可能导致 fseek 在文件末尾附近,不正常运行来完成的。t 选项不应使用的 Microsoft 扩展 ANSI 可移植性需位置。

  • b
    打开二进制文件 (未转换的) 模式;上述转换被禁止。

如果 t 或 b 在 mode未给出,特定模式的默认值由全局变量 _fmode定义的。如果 t 或 b 前缀给参数,则函数将失败并返回 NULL。

有关文本和二进制模式的讨论,请参见 文本和二进制架构文件 I/O

要求

功能

必需的标头

freopen

<stdio.h>

_wfreopen

<stdio.h> 或 <wchar.h>

控件个在 Windows 应用商店 apps 不受支持。标准流处理与控件个,stdin,stdout和 stderr,在 C 运行时函数在 Windows 应用商店 apps 之前,可以使用它们必须重定向。有关其他的兼容性信息,请参见中介绍的 兼容性

示例

// crt_freopen.c
// compile with: /W3
// 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 )
{
   // Reassign "stderr" to "freopen.out": 
   stream = freopen( "freopen.out", "w", stderr ); // C4996
   // Note: freopen is deprecated; consider using freopen_s instead

   if( stream == NULL )
      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 等效项

请参见

参考

流I/O

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_open, _wopen

_setmode