次の方法で共有


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関数DuplicateLockRange、およびUnlockRangeは、CStdioFileではサポートされていません。

CStdioFileでこれらの関数を呼び出すと、CNotSupportedExceptionが表示されます。

CStdioFileの使用方法の詳細については、「Run-Time ライブラリ リファレンス MFCFiles」および「File Handling」を参照してください。

継承階層

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 オブジェクトを作成し、指定されたパスで対応するファイルを開きます。

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 クラス