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
関数Duplicate
、LockRange
、およびUnlockRange
は、CStdioFile
ではサポートされていません。
CStdioFile
でこれらの関数を呼び出すと、CNotSupportedException
が表示されます。
CStdioFile
の使用方法の詳細については、「Run-Time ライブラリ リファレンス MFC のFiles」および「File Handling」を参照してください。
継承階層
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
オブジェクトにアタッチします。 使用可能なポインター値には、定義済みの入出力ファイル ポインター stdin
、 stdout
、または stderr
が含まれます。
2 パラメーター コンストラクターは、 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 (|
) 演算子を使用して、オプションを組み合わせることができます。 1 つのアクセス許可と 1 つの共有オプションが必要です。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
はテキスト モード入力でも使用できますが、復帰改行ペアでは終了しません。
Note
この関数の 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
を使用して、ポインターを 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
を使用します。
このメソッドは、lpsz
パラメーターにNULL
を指定すると、CInvalidArgException*
をスローします。
このメソッドは、ファイル システム エラーに応答して CFileException*
をスローします。
例
CStdioFile f(stdout);
TCHAR buf[] = _T("test string");
f.WriteString(buf);
関連項目
CFile
クラス
階層図
CFile
クラス
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException
クラス