_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+"存取型別,所有寫入作業就會發生在檔案結尾處。 可以使用調整檔案指標的位置fseek或rewind,但它一律移至檔案結尾之前任何寫入作業會執行。 因此,無法覆寫現有的資料。 當"r+", "w+",或"a+"存取型別指定,則允許讀取和寫入 (檔案即為開啟更新)。 不過,當讀取和寫入時,必須要有介入之間的切換 fsetpos, fseek,或 倒轉作業。 目前的位置,請指定給fsetpos或fseek作業,如有需要。 除了上述的值,下列某些字元可包含在mode ,指定換行字元,以及檔案管理的轉譯模式。
詞彙 |
定義 |
---|---|
t |
(轉譯) 的文字模式來開啟檔案。 在此模式中,換行字元 return–線條送紙 (CR-LF) 組合時,會轉譯成單一線條餵送 (LF) 上,輸入並 LF 字元會轉譯為在輸出的 CR LF 組合。 此外,CTRL + Z 組合鍵會解譯成輸入的檔案結尾字元。 在 [檔案開啟進行讀取或讀取/寫入, _fsopen檢查 CTRL + Z 結尾的檔案並移除它,如果可能的話。 這是因為使用fseek和ftell 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 |
需求
Function |
所需的標題 |
選擇性標頭 |
---|---|---|
_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 對等用法
System::IO::FileStream::FileStream