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
。
これらの関数をaで CStdioFile
呼び出すと CNotSupportedException
、 .
使用CStdioFile
の詳細については、「MFC のファイル」および「ランタイム ライブラリ リファレンス」のファイル処理に関する記事を参照してください。
継承階層
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
オブジェクトに関連付けられているファイルから、最大 -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
クラス
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示