CStdioFile クラス

ランタイム関数 fopenによって開かれた C ランタイム ストリーム ファイルを表します。

構文

class CStdioFile : public CFile

メンバー

パブリック コンストラクター

名前 説明
CStdioFile::CStdioFile CStdioFileパスまたはファイル ポインターからオブジェクトを構築します。

パブリック メソッド

名前 説明
CStdioFile::Open 過負荷です。 Open は、既定 CStdioFile のコンストラクター (オーバーライド CFile::Open) で使用するように設計されています。
CStdioFile::ReadString 1 行のテキストを読み取ります。
CStdioFile::Seek 現在のファイル ポインターを配置します。
CStdioFile::WriteString 1 行のテキストを書き込みます。

パブリック データ メンバー

名前 説明
CStdioFile::m_pStream 開いているファイルへのポインターを格納します。

解説

ストリーム ファイルはバッファー処理され、テキスト モード (既定) またはバイナリ モードで開くことができます。

テキスト モードでは、復帰と改行のペアに対して特別な処理が提供されます。 テキスト モード CStdioFile オブジェクトに改行 (改行) 文字 (0x0A) を書き込むと、バイト ペア (0x0D、0x0A) がファイルに送信されます。 読み取ると、バイト ペア (0x0D、0x0A) が 1 つの0x0A バイトに変換されます。

CFile関数DuplicateLockRangeUnlockRangeサポートされていませんCStdioFile

これらの関数をaで CStdioFile呼び出すと CNotSupportedException、 .

使用CStdioFileの詳細については、「MFC のファイル」および「ランタイム ライブラリ リファレンス」のファイル処理に関する記事を参照してください

継承階層

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 ( | ) 演算子を使用して、複数のオプションを指定できます。

1 つのファイル アクセス モード オプションが必要です。その他のモードは省略可能です。 モード オプションとその他のフラグの一覧を参照してください CFile::CFile 。 MFC バージョン 3.0 以降では、共有フラグが許可されます。

pTM
オブジェクトへの CAtlTransactionManager ポインター。

解説

既定のコンストラクターは、オブジェクトにファイルを CStdioFile アタッチしません。 このコンストラクターを使用する場合は、メソッドを CStdioFile::Open 使用してファイルを開き、オブジェクトにアタッチする CStdioFile 必要があります。

単一パラメーター コンストラクターは、開いているファイル ストリームをオブジェクトに CStdioFile アタッチします。 使用できるポインター値には、定義済みの入力/出力ファイル ポインター stdinstdoutまたは stderr.

2 パラメーターコンストラクターはオブジェクトを 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 (|) 演算子を使用して、オプションを組み合わせることができます。 1 つのアクセス許可と 1 つの共有オプションが必要です。modeCreate モードと modeNoInherit モードは省略可能です。

pError
失敗した操作の状態を受け取る既存のファイル例外オブジェクトへのポインター。

pTM
CAtlTransactionManager オブジェクトを指すポインター。

戻り値

成功した場合は TRUE。それ以外の場合は FALSE

解説

CStdioFile::ReadString

オブジェクトに関連付けられているファイルから、最大 -1 文字の nMaxバッファーにテキスト データを CStdioFile 読み取ります。

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

パラメーター

lpsz
null で終わるテキスト文字列を受け取る、ユーザー指定のバッファーへのポインターを指定します。

nMax
バッファーに書き込 lpsz む最大文字数 (終端の null を含む) を指定します。

rString
関数が CString 返されるときに文字列を格納するオブジェクトへの参照。

戻り値

テキスト データを格納しているバッファーへのポインター。 NULL データを読み取らずにファイルの終わりに達した場合。またはブール値の場合は、 FALSE データを読み取らずにファイルの末尾に到達した場合。

解説

読み取りは、最初の改行文字によって停止されます。 その場合、-1 文字未満 nMaxが読み取られた場合、改行文字がバッファーに格納されます。 どちらの場合も、null 文字 ('\0') が追加されます。

CFile::Read はテキスト モード入力でも使用できますが、復帰改行ペアでは終了しません。

Note

この関数のバージョンでは CString if LPTSTR'\n'削除されます。バージョンは削除されません。

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 ファイルの先頭から 1000 バイト移動する方法を cfile 示しています。 データは 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した場合に a CInvalidArgException*lpszスローします。

このメソッドは、ファイル システム エラーに応答して a CFileException* をスローします。

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

f.WriteString(buf);

関連項目

CFile クラス
階層図
CFile クラス
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException クラス