_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+" 访问类型时,所有写入操作发生在文件末尾。 使用 fseekrewind,文件指针可以被重新定位,但是,它始终被移动到文件尾,在所有写入操作之前。 因此,现有数据无法重写。 当 "r+"、 "w+"或 "a+" 访问类型指定,时读取和写入允许 (文件被视为打开状态以进行更新)。 但是,那么,当切换在读取和写入之间时,必须有介入的 fsetposfseek倒带 操作。 如果需要当前位置可用于 fsetposfseek 操作指定,。 除了上面的值,以下字符之一。 mode 可以包含指定版本模式为新行以及文件管理。

术语

定义

t

在文本 (转换) 模式打开的文件。 在此模式下,支持返回换行符 (CR-LF) 组合转换为输入的唯一换行符 (LF),并且 LF 字符转换为输出中 CR-LF 组合。 此外, CTRL+Z 被解释为编码的文件结尾字符。 如果可能在用于读取或读取打开的文档/写入, _fsopen 检查 CTRL+Z 在文件末尾并将其移除,。 这样做,因为使用 fseekftell 在按 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 等效项

请参见

参考

流I/O

fclose, _fcloseall

_fdopen, _wfdopen

ferror

_fileno

fopen, _wfopen

freopen, _wfreopen

_open, _wopen

_setmode

_sopen, _wsopen