CStdioFile
類別
表示運行時間函式所開啟的 fopen
C 執行時間數據流檔案。
語法
class CStdioFile : public CFile
成員
公用建構函式
名稱 | 描述 |
---|---|
CStdioFile::CStdioFile |
CStdioFile 從路徑或檔案指標建構物件。 |
公用方法
名稱 | 描述 |
---|---|
CStdioFile::Open |
已多載。 Open 是設計來搭配預設 CStdioFile 建構函式使用 (Overrides CFile::Open )。 |
CStdioFile::ReadString |
讀取單行文字。 |
CStdioFile::Seek |
放置目前的檔案指標。 |
CStdioFile::WriteString |
寫入單行文字。 |
公用資料成員
名稱 | 描述 |
---|---|
CStdioFile::m_pStream |
包含開啟檔案的指標。 |
備註
數據流檔案會緩衝處理,而且可以在文字模式(預設值)或二進位模式中開啟。
文字模式為歸位字元換行字元組提供特殊處理。 當您將換行字元 (0x0A) 寫入至文字模式 CStdioFile
物件時,位元組組 (0x0D, 0x0A) 會傳送至檔案。 當您讀取時,位元組組 (0x0D, 0x0A) 會轉譯成單一0x0A位元組。
CFile
不支援函Duplicate
式、 LockRange
與 UnlockRange
CStdioFile
。
如果您在 上 CStdioFile
呼叫這些函式,您將會收到 CNotSupportedException
。
如需使用 CStdioFile
的詳細資訊,請參閱中的
繼承階層架構
CStdioFile
需求
標頭: afx.h
CStdioFile::CStdioFile
建構並初始化 CStdioFile
物件。
CStdioFile();
CStdioFile(CAtlTransactionManager* pTM);
CStdioFile(FILE* pOpenStream);
CStdioFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);
CStdioFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM);
參數
pOpenStream
指定呼叫 C 執行時間函 fopen
式 所傳回的檔案指標。
lpszFileName
指定字串,這個字串是所需檔案的路徑。 路徑可為相對路徑或絕對路徑。
nOpenFlags
指定檔案建立、檔案共享和檔案存取模式的選項。 您可以使用位 OR ( |
) 運算子來指定多個選項。
需要一個檔案存取模式選項;其他模式是選擇性的。 如需模式選項和其他旗標的清單,請參閱 CFile::CFile
。 在 MFC 3.0 版和更新版本中,允許共用旗標。
pTM
CAtlTransactionManager
物件的指標。
備註
默認建構函式不會將檔案附加至 CStdioFile
物件。 使用此建構函式時,您必須使用 CStdioFile::Open
方法來開啟檔案,並將它附加至 CStdioFile
物件。
單一參數建構函式會將開啟的檔案數據流附加至 CStdioFile
物件。 允許的指標值包括預先定義的輸入/輸出檔案指標 stdin
、 stdout
或 stderr
。
雙參數建構函式會 CStdioFile
建立 物件,並開啟具有指定路徑的對應檔案。
如果您針對 pOpenStream
或 lpszFileName
傳遞 NULL
,建構函式會CInvalidArgException*
擲回 。
如果無法開啟或建立檔案,建構函式會 CFileException*
擲回 。
範例
TCHAR* pFileName = _T("CStdio_File.dat");
CStdioFile f1;
if(!f1.Open(pFileName, CFile::modeCreate | CFile::modeWrite
| CFile::typeText))
{
TRACE(_T("Unable to open file\n"));
}
CStdioFile f2(stdout);
try
{
CStdioFile f3( pFileName,
CFile::modeCreate | CFile::modeWrite | CFile::typeText );
}
catch(CFileException* pe)
{
TRACE(_T("File could not be opened, cause = %d\n"),
pe->m_cause);
pe->Delete();
}
CStdioFile::m_pStream
數據 m_pStream
成員是 C 運行時間 fopen
函式 所傳回之開啟檔案的指標。
FILE* m_pStream;
備註
如果 NULL
檔案從未開啟或已關閉,則為 。
CStdioFile::Open
已多載。 Open 是設計來搭配預設 CStdioFile
建構函式使用。
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL);
參數
lpszFileName
字串,這是所需檔案的路徑。 路徑可為相對路徑或絕對路徑。
nOpenFlags
共用和存取模式。 指定要在開啟檔案時採取的動作。 您可以使用位 OR (|
) 運算子來合併選項。 需要一個訪問許可權和一個共享選項;modeCreate 和 modeNoInherit 模式是選擇性的。
pError
將接收失敗作業狀態的現有檔案例外狀況物件的指標。
pTM
指向 CAtlTransactionManager
物件的指標。
傳回值
如果成功,則為 TRUE
,否則為 FALSE
。
備註
CStdioFile::ReadString
從與 CStdioFile
對象相關聯的檔案,將文字數據讀入緩衝區,最多限製nMax
為 -1 個字元。
virtual LPTSTR ReadString(
LPTSTR lpsz,
UINT nMax);
virtual BOOL ReadString(CString& rString);
參數
lpsz
指定使用者提供的緩衝區指標,該緩衝區將接收以 Null 結束的文字字串。
nMax
指定要寫入 lpsz
緩衝區的最大字元數,包括終止 Null。
rString
對象的參考 CString
,這個物件會在函式傳回時包含字串。
傳回值
包含文字數據的緩衝區指標。 NULL
如果在未讀取任何資料的情況下到達檔尾,則為 ;或布爾值, FALSE
如果到達檔尾,但未讀取任何數據。
備註
讀取會由第一個新行字元停止。 在此情況下,如果讀取的字元少於 nMax
-1 個字元,則會將換行符儲存在緩衝區中。 在任一情況下,會附加 Null 字元 ('\0'
)。
CFile::Read
也適用於文字模式輸入,但不會在歸位字元換行字元組終止。
注意
如果存在,此 CString
函式的版本會 '\n'
移除 ; LPTSTR
版本不會。
範例
CStdioFile f(stdin);
TCHAR buf[100];
f.ReadString(buf, 99);
CStdioFile::Seek
將指標重新置放在先前開啟的檔案中。
virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);
參數
lOff
移動指標的位元組數目。
nFrom
指標移動模式。 必須是下列其中一個值:
CFile::begin
:將檔案指標lOff
位元組從檔案開頭往前移動。CFile::current
:將檔案指標lOff
位元組從檔案的目前位置移動。CFile::end
:從檔案結尾移動檔案指標lOff
位元組。 請注意,lOff
必須是負數,才能搜尋現有的檔案;正值會搜尋超過檔案結尾。
傳回值
如果要求的位置是合法的, Seek
則會從檔案開頭傳回新的位元組位移。 否則,傳回值是未定義的,而且 CFileException
會擲回 物件。
備註
函 Seek
式允許以絕對或相對的方式移動指標,以隨機存取檔案的內容。 搜尋期間實際上不會讀取任何數據。 如果要求的位置大於檔案的大小,檔案長度將會延伸至該位置,而且不會擲回任何例外狀況。
開啟檔案時,檔案指標會位於檔案的開頭位移 0。
Seek
的實作是以運行時間連結庫 (CRT) 函式fseek
為基礎。 在文字模式中開啟的數據流使用方式有數個限制 Seek
。 如需詳細資訊,請參閱 fseek
和 _fseeki64
。
範例
下列範例示範如何使用 Seek
從檔案開頭 cfile
移動指標 1000 個字節。 請注意, Seek
不會讀取數據,因此您必須後續呼叫 CStdioFile::ReadString
以讀取數據。
CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);
CStdioFile::WriteString
將數據從緩衝區寫入與 CStdioFile
對象相關聯的檔案。
virtual void WriteString(LPCTSTR lpsz);
參數
lpsz
指定包含 Null 終止字串之緩衝區的指標。
備註
終止的 Null 字元 ( \0
) 不會寫入檔案。 這個方法會將換行符 lpsz
寫入檔案中,做為歸位字元換行字元組。
如果您要將非 Null 終止的資料寫入檔案,請使用 CStdioFile::Write
或 CFile::Write
。
如果您為 參數指定 NULL
,lpsz
這個方法會CInvalidArgException*
擲回 。
這個方法會 CFileException*
擲回 ,以回應文件系統錯誤。
範例
CStdioFile f(stdout);
TCHAR buf[] = _T("test string");
f.WriteString(buf);
另請參閱
CFile
類
階層架構圖表
CFile
類
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException
類