_fsopen, _wfsopen
打开与该文件共享的流。
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
参数
filename
打开的文件的名称。mode
允许的访问类型。shflag
允许的共享的类型。
返回值
这些函数都返回一个指向流。 一个空指针值指示错误。 如果 filename 或 mode 是 NULL 或为空字符串,这些函数调用的参数无效处理程序,如中所 参数验证述。 如果执行允许继续,这些函数返回 NULL 并将 errno 到 EINVAL。
有关这些属性和其他错误代码的更多信息,请参见 _doserrno、 errno、 _sys_errlist 和 _sys_nerr。
备注
_fsopen 函数打开 filename 指定的文件作为流和文件进行后续共享读取或写入准备,所定义的模式和 shflag 参数。 _wfsopen 是 _fsopen的宽字符版本;为 _wfsopen 的 filename 和 mode 参数是宽字符字符串。 _wfsopen 和 _fsopen 否则具有相同的行为。
字符字符串 mode 指定文件请求的访问类型,如下表所示。
术语 |
定义 |
---|---|
"r" |
用于读取打开。 如果文件不存在或无法找到, _fsopen 调用失败。 |
"w" |
打开要编写的空文件。 如果给定文件存在,销毁其内容。 |
"a" |
为编写打开隐藏文件 (追加) 的末尾;,如果不存在,则先创建文件。 |
"r+" |
用于读取和写入打开。 (文件必须存在。) |
"w+" |
打开读取和写入的空文件。 如果给定文件存在,销毁其内容。 |
"a+" |
用于读取和追加打开,,如果不存在,则先创建文件。 |
谨慎使用 "w" 和 "w+" 类型,因此,它们可能损坏现有文件。
当文件打开与 "a" 或 "a+" 访问类型时,所有写入操作发生在文件末尾。 使用 fseek 或 rewind,文件指针可以被重新定位,但是,它始终被移动到文件尾,在所有写入操作之前。 因此,现有数据无法重写。 当 "r+"、 "w+"或 "a+" 访问类型指定,时读取和写入允许 (文件被视为打开状态以进行更新)。 但是,那么,当切换在读取和写入之间时,必须有介入的 fsetpos、 fseek或 倒带 操作。 如果需要当前位置可用于 fsetpos 或 fseek 操作指定,。 除了上面的值,以下字符之一。 mode 可以包含指定版本模式为新行以及文件管理。
术语 |
定义 |
---|---|
t |
在文本 (转换) 模式打开的文件。 在此模式下,支持返回换行符 (CR-LF) 组合转换为输入的唯一换行符 (LF),并且 LF 字符转换为输出中 CR-LF 组合。 此外, CTRL+Z 被解释为编码的文件结尾字符。 如果可能在用于读取或读取打开的文档/写入, _fsopen 检查 CTRL+Z 在文件末尾并将其移除,。 这样做,因为使用 fseek 和 ftell 在按 CTRL+Z 结束的文件内移动可能会导致 fseek 在文件末尾附近的不正常运行。 |
b |
在二进制 (未转换的) 模式打开一个文件;上述转换被禁止。 |
S |
指定缓存中优化对,但是,不受限制为,顺序访问从磁盘。 |
R |
指定缓存中优化对,但是,不受限制为,随机访问从磁盘。 |
T |
指定文件。临时。 如果可能,它不会刷新到磁盘。 |
D |
指定文件。临时。 ,在最后一个文件指针关闭时,则会将其删除。 |
如果 t 或 b 在 mode未给出,版本模式由默认架构变量 _fmode定义的。 如果 t 或 b 前缀给参数,则函数将失败并返回 NULL。 有关文本和二进制模式的讨论,请参见 文本和二进制架构文件 I/O。
参数 shflag 是常数表达式包含的一个下面清单常数,定义在 Share.h。
术语 |
定义 |
---|---|
_SH_COMPAT |
设置 16 位应用程序的兼容性模式。 |
_SH_DENYNO |
读取的许可和写入。 |
_SH_DENYRD |
拒绝文件的读取权限。 |
_SH_DENYRW |
拒绝文件的读取和写入。 |
_SH_DENYWR |
拒绝写入文件。 |
一般文本例程映射
Tchar.h 实例 |
未定义的 _UNICODE 和 _MBCS |
定义的 _MBCS |
定义的 _UNICODE |
---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
要求
功能 |
必需的头 |
可选标头 |
---|---|---|
_fsopen |
<stdio.h> |
<share.h> 为 shflag 参数的清单常数。 |
_wfsopen |
<stdio.h> 或 <wchar.h> |
<share.h> 为 shflag 参数的清单常数。 |
示例
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}
.NET Framework 等效项
系统:: IO:: FileStream:: FileStream