_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
    允许共享的类型。

返回值

这些函数均返回指向流的指针。 一个 null 指针值指示错误。 如果 filename 或 mode 为 NULL 或空字符串,这些函数将触发无效参数处理程序,正如参数验证所述。 如果允许执行继续,则这些函数返回 NULL 并将 errno 设置为 EINVAL。

有关这些属性和其他错误代码的详细信息,请参阅 _doserrno、errno、_sys_errlist 和 _sys_nerr

备注

_fsopen 函数通过将 filename 作为流并为后续的共享读取或编写准备文件来打开指定的文件,正如所定义的模式和 shflag 参数。 _wfsopen_fsopen 的宽字符版本; filename 和 mode 参数到 _wfsopen 时宽字符字符串。 _wfsopen_fsopen 行为相同,否则。

字符字符串 mode 指定为文件请求的访问类型,如下表所示。

术语

定义

"r"

打开以便读取。 如果文件不存在或找不到,_fsopen 调用将失败。

"w"

打开用于写入的空文件。 如果给定文件存在,则其内容会被销毁。

"a"

打开写在文件(追加)的结束;如果它不存在,那么先创建文件。

"r+"

打开以便读取和写入。(文件必须存在。)

"w+"

打开用于读取和写入的空文件。 如果给定文件存在,则其内容会被销毁。

"a+"

打开用于读取和追加;如果它不存在,则先创建文件。

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

当用 "a" 或 "a+" 访问类型打开文件时,所有写入操作均将在文件末尾进行。 使用 fseekrewind 可重新定位文件指针,但在执行任何写入操作前,文件指针将始终被移回文件末尾。 因此,无法覆盖现有数据。 指定 "r+"、"w+" 或 "a+" 访问类型时,允许读取和写入(文件将处于打开状态以进行更新)。 但是,当您在读取和写入之间切换,必须有介入的 fsetposfseekrewind 操作。 如果需要当前位置可用于 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