_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/O 和 fopen。)_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 和集合允許執行errno到EINVAL。
需求
常式 |
所需的標頭 |
選擇性標頭 |
---|---|---|
_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 對等用法
System::IO::FileStream::FileStream