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
);
参数
[out] pFile
调用将提供的文件指针的指针。[in] path
新文件路径。[in] mode
允许的访问类型。[in] stream
为 FILE 结构的指针。
返回值
这些函数都返回一个错误代码。如果发生错误,原始文件已关闭。
备注
freopen_s 功能关闭文件当前与 stream 和重新 stream 到 path. 指定的文件 _wfreopen_s 是 _freopen_s的宽字符版本;为 _wfreopen_s 的 path 和 mode 参数是宽字符字符串。_wfreopen_s 和 _freopen_s 否则具有相同的行为。
如果任何 pFile、path、mode或 stream 是 NULL,或者,如果 path 是空字符串,这些函数调用的参数无效处理程序,如 参数验证所述。如果执行允许继续,对 EINVAL 的这些功能集 errno 和返回 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"
为编写打开隐藏文件 (追加) 结束时,如果不移除 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+" 访问类型指定,时读取和写入允许 (文件被视为打开“更新”)。但是,那么,当您在读取和写入之间切换,必须有介入的 fsetpos、fseek或 倒带 操作。如果需要当前位置可用于 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_s |
<stdio.h> |
_wfreopen_s |
<stdio.h> 或 <wchar.h> |
控件个在 Windows 应用商店 apps 不受支持。标准流处理与控件个,stdin,stdout和 stderr,在 C 运行时函数在 Windows 应用商店 apps 之前,可以使用它们必须重定向。有关其他的兼容性信息,请参见中介绍的 兼容性。
示例
// 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 等效项
System::IO::FileStream::FileStream