_open _wopen

開啟檔案。這些函式會過時,因為更安全版本都可使用; see _sopen_s _wsopen_s.

int _open(
   const char *filename,
   int oflag [,
   int pmode] 
);
int _wopen(
   const wchar_t *filename,
   int oflag [,
   int pmode] 
);

參數

  • filename
    檔案名稱

  • oflag
    允許的作業型別。

  • pmode
    權限的模式。

傳回值

每個函式傳回開啟檔案的檔案描述項。傳回-1 表示發生錯誤,在此情況下errno設定為下列值之一。

  • EACCES
    嘗試開啟唯讀檔案進行寫入時,檔案的共用模式不允許指定的作業,或給定路徑是目錄。

  • EEXIST
    _O_CREAT與**_O_EXCL**旗標,指定,但filename已經存在。

  • EINVAL
    無效oflag或pmode引數。

  • EMFILE
    沒有可用的多個檔案描述 (太多開啟的檔案)。

  • ENOENT
    檔案或找不到路徑。

如需有關這些及其他的傳回碼的詳細資訊,請參閱 _doserrno、 errno、 _sys_errlist,以及 _sys_nerr

備註

_open函式會開啟所指定的檔案filename ,來準備檔案讀取或寫入,所指定的oflag。_wopen寬字元版本的**_open**。 filename引數為**_wopen是寬字元字串。_wopen_open**其他方式完全相同。

泛用文字常式對應

Tchar.h 常式

_Unicode 之後,未定義的 _MBCS

定義的 _MBCS

定義 _unicode 之後

_topen

_open

_open

_wopen

oflag從一或多個下列的資訊清單常數或常數的組合,在 Fcntl.h 中定義格式的整數運算式。

  • _O_APPEND
    將檔案指標移至檔案結尾之前每次寫入作業。

  • _O_BINARY
    以二進位的 (未轉譯的) 模式中開啟檔案。(請參閱 fopen binary 模式的說明。)

  • _O_CREAT
    建立並開啟新的檔案進行寫入。如果所指定的檔案有任何作用filename存在。pmode引數是必要的時機**_O_CREAT**所指定。

  • _O_CREAT| _O_SHORT_LIVED
    建立為暫存檔案,並盡可能無法清除至磁碟。pmode引數是必要的時機**_O_CREAT**所指定。

  • _O_CREAT| _O_TEMPORARY
    檔案建立為暫存的。 上一次的檔案描述元關閉時,會刪除該檔案。pmode引數是必要的時機**_O_CREAT**所指定。

  • _O_CREAT| _O_EXCL
    如果所指定的檔案,則傳回錯誤值filename存在。搭配使用時,才適用**_O_CREAT**。

  • _O_NOINHERIT
    可避免建立共用的檔案描述項。

  • _O_RANDOM
    指定快取是最適合,但不是會受到於隨機存取磁碟。

  • _O_RDONLY
    開啟檔案以進行讀取 ; 與不可同時指定**_O_RDWR_O_WRONLY**。

  • _O_RDWR
    開啟檔案以進行讀取和寫入。 您不能指定這個旗標與**_O_RDONLY_O_WRONLY**。

  • _O_SEQUENTIAL
    指定的最佳化,但不是限於,循序存取從磁碟快取。

  • _O_TEXT
    (轉譯) 的文字模式來開啟檔案。(如需詳細資訊,請參閱文字和二進位模式的檔案 I/Ofopen。)

  • _O_TRUNC
    開啟檔案,並將其設為零長度 ; 截短 檔案必須具有寫入權限。您不能指定這個旗標與**_O_RDONLY**。_O_TRUNC搭配**_O_CREAT**開啟現有的檔案,或建立新的檔案。

    注意事項注意事項

    _O_TRUNC旗標會終結指定的檔案的內容。

  • _O_WRONLY
    開啟檔案進行寫入 ; 與不可同時指定**_O_RDONLY_O_RDWR**。

  • _O_U16TEXT
    在 Unicode utf-16 模式中開啟的檔案。

  • _O_U8TEXT
    在 Unicode 時發生字元轉換模式中開啟的檔案。

  • _O_WTEXT
    在 Unicode 模式中開啟的檔案。

若要指定檔案的存取模式,您必須指定其中一個**_O_RDONLY**, _O_RDWR,或**_O_WRONLY**。沒有預設值的存取模式。

如果**_O_WTEXT用來開啟檔案進行讀取, _open讀取的檔案,並檢查是否有位元組順序標記 (BOM) 開頭。如果沒有 BOM,檔案會被視為 utf-8 或 utf-16le BOM 而定。如果沒有 BOM 存在,檔案會被視為 ANSI。當開啟檔案以供寫入使用_O_WTEXT**,會使用 utf-16。如果**_O_UTF8時,開啟檔案時一律為 utf-8 則為由右_O_UTF16**是使用,開啟檔案時一律為 utf-16 不論任何先前的設定值或第一個位元組順序標記。

如果**_open以呼叫_O_WRONLY|_O_APPEND** (附加模式) 和**_O_WTEXT**, _O_U16TEXT,或**_O_U8TEXT**,它首先會嘗試開啟檔案進行讀取及寫入,讀取 BOM,然後再重新開啟只供寫入。如果開啟檔案進行讀取和寫入失敗,它會開啟只供寫入檔案,並使用 Unicode 模式] 設定的預設值。

當兩個或更多的資訊清單常數會用於表單oflag引數,以位元 OR 運算子 (結合常數 |).二進位和文字模式的說明,請參閱文字和二進位模式的檔案 I/O

pmode是必要的引數時才**_O_CREAT所指定。如果檔案已經存在, pmode會被忽略。否則, pmode指定檔案的權限設定,會設定當第一次關閉新的檔案。_open**套用至目前的檔案使用權限遮罩pmode之前設定的權限 (如需詳細資訊,請參閱 _umask)。pmode一個整數運算式包含一個或多個下列資訊清單定義的常數,在 SYS\Stat.h 中。

  • _S_IREAD
    只允許讀取。

  • _S_IWRITE
    允許寫入 (可以有效地允許讀取和寫入)。

  • _S_IREAD | _S_IWRITE
    允許讀取與寫入。

當有兩個常數時,它們加入以位元 OR 運算子 ( |).在 Windows NT 中所有檔案都都變成可讀取,因此唯寫屬性的權限就無法使用。 因此模式**_S_IWRITE** ,_S_IREAD | _S_IWRITE相等。

如果不是上述指定的值pmode (即使它會指定有效的pmode在另一個作業系統) 或任何值,而不允許oflag指定值,此函式會判斷提示產生偵錯模式中,並叫用無效的參數處理常式,如所述參數驗證。如果要繼續,函式傳回-1 和集合允許執行errnoEINVAL

需求

常式

所需的標頭

選擇性標頭

_open

<io.h>

<fcntl.h>,<sys/types.h>,<sys/stat.h>

_wopen

<io.h> 或者 <wchar.h>

<fcntl.h>,<sys/types.h>,<sys/stat.h>

如需相容性資訊,請參閱相容性在簡介中。

文件庫

所有版本的 C 執行階段程式庫

範例

// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
 * named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
 * for output. The files are then closed.
 */
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>

int main( void )
{
   int fh1, fh2;

   fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
   // Note: _open is deprecated; consider using _sopen_s instead
   if( fh1 == -1 )
      perror( "Open failed on input file" );
   else
   {
      printf( "Open succeeded on input file\n" );
      _close( fh1 );
   }

   fh2 = _open( "CRT_OPEN.OUT", _O_WRONLY | _O_CREAT, _S_IREAD | 
                            _S_IWRITE ); // C4996
   if( fh2 == -1 )
      perror( "Open failed on output file" );
   else
   {
      printf( "Open succeeded on output file\n" );
      _close( fh2 );
   }
}

Output

Open succeeded on input file
Open succeeded on output file

.NET Framework 對等用法

請參閱

參考

低階 I/O

_chmod _wchmod

_close

_creat _wcreat

_dup _dup2

fopen _wfopen

_sopen _wsopen