分享方式:


CStdioFile 類別

表示運行時間函式所開啟的 fopenC 執行時間數據流檔案。

語法

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式、 LockRangeUnlockRange CStdioFile

如果您在 上 CStdioFile呼叫這些函式,您將會收到 CNotSupportedException

如需使用 CStdioFile的詳細資訊,請參閱中的 中的檔案>和<檔案處理>一文。

繼承階層架構

CObject

CFile

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 物件。 允許的指標值包括預先定義的輸入/輸出檔案指標 stdinstdoutstderr

雙參數建構函式會 CStdioFile 建立 物件,並開啟具有指定路徑的對應檔案。

如果您針對 pOpenStreamlpszFileName傳遞 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::WriteCFile::Write

如果您為 參數指定 NULLlpsz這個方法會CInvalidArgException*擲回 。

這個方法會 CFileException* 擲回 ,以回應文件系統錯誤。

範例

CStdioFile f(stdout);
TCHAR buf[] = _T("test string");

f.WriteString(buf);

另請參閱

CFile
階層架構圖表
CFile
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException