共用方式為


_fdopen _wfdopen

會將資料流關聯的低階 I/O 先前開啟的檔案。

FILE *_fdopen(  
   int fd,
   const char *mode 
);
FILE *_wfdopen( 
   int fd,
   const wchar_t *mode 
);

參數

  • fd
    開啟檔案的檔案描述項。

  • mode
    檔案存取的型別。

傳回值

每個函式傳回開啟資料流的指標。Null 指標值,表示發生錯誤。當發生錯誤時,不正確的參數處理常式會叫用,如所述參數驗證。若要繼續,請允許執行errno被設定為其中一個EBADF,表示錯誤的檔案描述項,或EINVAL,來表示, mode為空值的指標。

如需這些和其他錯誤碼的詳細資訊,請參閱 _doserrno、 errno、 _sys_errlist,以及 _sys_nerr

備註

_fdopen函式會將 I/O 資料流關聯的檔案,由fd,並可以使用緩衝處理,並設定格式的低階 I/O 為開啟的檔案,因此。_wfdopen寬字元版本的_fdopen。 mode引數,以_wfdopen是一個寬字元字串。_wfdopen與_fdopen否則運作方式完全相同。

泛用文字常式對應

Tchar.h 常式

_UNICODE 和未定義的 _MBCS

定義的 _MBCS

定義 _unicode 之後

_tfdopen

_fdopen

_fdopen

_wfdopen

mode字元字串指定的檔案和檔案存取類型。

字元字串mode指定的要求檔案的存取類型,如下列表格所示。

  • "r"
    開啟進行讀取。如果檔案不存在或找不到, fopen呼叫失敗。

  • "w"
    開啟空白檔案進行寫入。如果指定的檔案存在,其內容已終結。

  • "a"
    會開啟以進行寫入,結尾的檔案 (附加)。如果不存在,請建立該檔案。

  • "r+"
    會開啟以進行讀取和寫入。(檔案必須存在)。

  • "w+"
    開啟空白檔案來讀取和寫入。如果指定的檔案存在,其內容已終結。

  • "a+"
    會開啟以進行讀取和附加。如果不存在,請建立該檔案。

與開啟檔案時"a"或"a+"存取型別,所有寫入作業就會發生在檔案結尾處。檔案指標可以藉由調整位置fseek或rewind,但就會永遠移回至檔案結尾之前任何寫入作業會執行。因此,不能覆寫現有的資料。當"r+", "w+",或"a+"的存取類型指定,則允許讀取和寫入 (檔案即為開啟,以供 「 更新 」)。不過,當您切換讀取及寫入時,必須有介入fflush, fsetpos, fseek,或rewind作業。您可以指定為目前的位置fsetpos或fseek如果您想要的作業。

除了上述的值,下列的字元也可以包含在mode來指定新行字元的轉譯模式。

  • t
    在文字中的開啟 (轉譯) 模式。在此模式下,歸位字元-換 (CR-LF) 組合會轉譯成一行餵送 (LF) 上的輸入,然後 LF 字元會轉譯為在輸出的 CR LF 組合。此外,Ctrl + Z 組合鍵會解譯成輸入的檔案結尾字元。在 [檔案開啟進行讀取/寫入, fopen檢查 Ctrl + Z 結尾的檔案並移除它,如果可能的話。這是因為使用fseek和ftell函式,以 Ctrl + Z 組合鍵以結束檔案內移動,可能會導致fseek來執行檔案的結尾附近的錯誤。

  • b
    以二進位 (未轉譯的) 模式開啟。從任何轉譯t模式將被抑制。

  • c
    啟用相關聯的認可旗標filename ,讓檔案緩衝區的內容會直接寫入磁碟,如果其中一個fflush或_flushall呼叫。

  • n
    重新設定相關聯的認可旗標filename為"否-認可"這是預設值。如果您要連結您的程式與 Commode.obj,它也會覆蓋全域認可旗標。認可的全域旗標預設值是"否認可",除非您明確地連結您的程式與 Commode.obj。

The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.不要使用它們若您想要保留 ANSI 可攜性。

如果t或b已不會列在mode,由全域變數定義的預設轉譯模式 _fmode。如果t或b引數、 函式失敗,且傳回有前置NULL。文字及二進位模式的說明,請參閱文字和二進位模式的檔案 I/O

有效字元為mode中使用字串fopen和_fdopen會對應到oflag引數中使用 _ 開啟的_sopen、,如下所示。

在字元mode字串

Equivalent oflagvalue for _open/_sopen

a

_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND)

a+

_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC)

w+

_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

None

n

None

需求

Function

所需標頭

_fdopen

<stdio.h>

_wfdopen

<stdio.h> 或者 <wchar.h>

如需相容性資訊,請參閱相容性

範例

// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.


#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>

int main( void )
{
   FILE *stream;
   int  fd, count = 0;
   char inbuf[128];

   // Open a file.
   if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
      exit( 1 );

   // Get stream from file descriptor.
   if( (stream = _fdopen( fd, "r" )) == NULL )
      exit( 1 );

   while( fgets( inbuf, 128, stream ) != NULL )
      count++;

   // After _fdopen, close by using fclose, not _close.
   fclose( stream );
   printf( "Lines in file: %d\n", count );
}

輸入: crt_fdopen.txt

Line one
Line two

dye30d82.collapse_all(zh-tw,VS.110).gifOutput

Lines in file: 2

.NET Framework 對等用法

System::IO::FileStream::FileStream

請參閱

參考

資料流 I/O

_dup _dup2

fclose _fcloseall

fopen _wfopen

freopen _wfreopen

_open _wopen