共用方式為


_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 的寬字元版本;對於**_wfsopen** 指標的filename和mode引數是寬字元字串。 _wfsopen_fsopen 其餘行為相同。

字元字串 mode 會指定對檔案要求的存取型別,如下表所示。

詞彙

定義

"r"

開啟以讀取。 如果檔案不存在或找不到,_fsopen 呼叫就會失敗。

"w"

開啟空白檔案以寫入。 如果指定的檔案已存在,其內容將被終結。

"a"

開啟以附加撰寫在檔案結尾;如果檔案不存在,請先建立檔案。

"r+"

開啟以進行讀取和寫入。(檔案必須存在。)

"w+"

開啟空白檔案以進行讀取和寫入。 如果指定的檔案已存在,其內容將被終結。

"a+"

開啟以讀取和附加;如果檔案不存在,請先建立檔案。

請使用 "w" 和 "w+" 型別請注意,它們可以終結現有檔案。

當檔案與 "a" 或 "a+" 存取型別一起開啟檔案時,所有寫入作業都會在檔案結尾進行。 使用 fseekrewind可以重新調整檔案指標位置,但是在執行任何寫入作業之前,永遠會移回至檔案結尾。 因此,無法覆寫現有資料。 指定 "r+"、"w+" 或 "a+" 存取類型時,同時允許讀取和寫入 (表示檔案是要開啟以供更新之用)。 然而,當您在讀取和寫入之間切換時,必定會有干擾的 fsetposfseekrewind 作業。 如果需要,目前位置可以為 fsetposfseek 作業指定。 除了上述值之外,下列其中一個字元可能包含在 mode,以為了 新行和檔案管理指定平移模式。

詞彙

定義

t

以文字模式 (已轉譯) 開啟檔案。 在這個模式下,傳回-line feed (CR-LF) 組合的歸位字元會在輸入時轉換成單行換行字元,而 LF 字元會在輸出時轉換成 CR-LF 組合。 此外, CTRL+Z 將解譯成輸入的檔案結尾字元。 如果可能的話,在檔案開啟為讀取/寫入時,_fsopen會檢查檔案結尾是否有 CTRL+Z,並加以移除。 之所以這樣做,是因為使用 fseekftell 以 CTRL+Z 結束的檔案內移動可能會讓 fseek 在檔案結尾附近產生不正確的行為。

b

以二進位 (未轉譯的) 模式開啟檔案;上述轉譯會隱藏。

S

指定針對但不限於磁碟的循序存取進行快取最佳化。

R

指定針對但不限於磁碟的隨機存取進行快取最佳化。

T

指定檔案做為暫存檔。 可能的話,不將其清除至磁碟。

D

指定檔案做為暫存檔。 當最後一個檔案指標關閉時,將其刪除。

如果 mode 未指定為 t 或 b,則平移模式會被預設模式變數**_fmode**所定義。 如果引數前置 t 或 b,則函式失敗並傳回 NULL。 如需文字和二進位模式的討論,請參閱 文字和二進位模式檔案 I/O

參數 shflag 是一個常值表達式,由以下其中一個定義於 Share.h 的表示常值組成。

詞彙

定義

_SH_COMPAT

將 16 位元應用程式設為相容性模式。

_SH_DENYNO

允許讀取和寫入權限。

_SH_DENYRD

拒絕檔案的讀取權限,

_SH_DENYRW

拒絕讀取和寫入檔案的存取權限,

_SH_DENYWR

拒絕寫入檔案的存取權限,

一般文字常式對應

Tchar.h 常式

未定義 _UNICODE and _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