CFile::CFile
更新 : 2007 年 11 月
このコンストラクタは、既定では、ファイルを開かずに m_hFile を CFile::hFileNull に設定します。
CFile( );
CFile(
HANDLE hFile
);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags
);
パラメータ
hFile
前回 CreateFile を呼び出したときに返された HFILE。Windows SDK を参照してください。lpszFileName
目的のファイルのパスを示す文字列。相対パスまたは絶対パスを指定できます。nOpenFlags
共有モードおよびアクセス モード。ファイルを開くときに実行するアクションを指定します。ビットごとの OR (|) 演算子を使って、以下に示されているオプションを組み合わせることができます。アクセス許可モードと共有モードは、それぞれ 1 つは指定する必要があります。modeCreate モードと modeNoInherit モードはオプションです。次のような値があります。CFile::modeCreate コンストラクタに新しいファイルを作成するように指示します。ファイルが既に存在するときは、そのファイルの長さが 0 に切り捨てられます。
CFile::modeNoTruncate この値は modeCreate と組み合わせて使います。この値を指定すると、作成するファイルが既に存在する場合も、既存ファイルの長さが 0 に切り捨てられません。さらに、作成するファイルが既に存在する場合、基になるファイル ポインタは、そのファイルの先頭を指し示します。そのため、新しく作成されたファイルでも、既存のファイルでも、確実に開くことができます。たとえば、設定ファイルを開く場合、そのファイルが既に存在しても、していなくても開けるので便利です。このオプションは CStdioFile にも同じように適用されます。
CFile::modeRead ファイルを読み取り専用で開きます。
CFile::modeReadWrite ファイルを読み書き可能で開きます。
**CFile::modeWrite **ファイルを書き込み専用で開きます。
**CFile::modeNoInherit **子プロセスによってファイルが継承されないようにします。
**CFile::shareDenyNone **ほかのプロセスからも読み取りまたは書き込みできる状態でファイルを開きます。指定したファイルがほかのプロセスにより互換モードで開かれているときは、Create 関数は失敗します。
CFile::shareDenyRead ほかのプロセスからは読み取れない状態でファイルを開きます。指定したファイルがほかのプロセスにより互換モードまたは読み出しモードで開かれているときは、Create 関数は失敗します。
CFile::shareDenyWrite ほかのプロセスからは書き込めない状態でファイルを開きます。指定したファイルがほかのプロセスにより互換モードまたは書き込みモードで開かれているときは、Create 関数は失敗します。
CFile::shareExclusive ファイルを排他モードで開きます。このファイルに対して、ほかのプロセスから読み取り/書き込みを行うことはできません。ファイルが排他モード以外のモード (読み取りまたは書き込みなど) で開かれているときは、開いたプロセスが現在のプロセスでも構築は失敗します。
CFile::shareCompat このフラグは 32 ビット MFC および 64 ビット MFC では使用できません。このフラグは、CFile::Open で使用すると CFile::shareExclusive に割り当てられます。
CFile::typeText キャリッジ リターンとライン フィードの組み合わせに特別な処理を行うテキスト モードを設定します。派生クラスでだけ使います。
CFile::typeBinary バイナリ モードを設定します。派生クラスでだけ使います。
**CFile::osNoBuffer **システムはシステム キャッシュなしでファイルを開きます。詳細については、Windows SDK の「CreateFile」で FILE_FLAG_NO_BUFFERING の説明を参照してください。
**CFile::osWriteThrough **システムは、中間キャッシュを使用し、直接ディスクに書き込みます。詳細については、Windows SDK の「CreateFile」で FILE_FLAG_WRITE_THROUGH の説明を参照してください。
**CFile::osRandomAccess **ファイルはランダムにアクセスされます。システムはこれをヒントに使用し、ファイルのキャッシュを最適化します。
**CFile::osSequentialScan **ファイルは最初から最後まで連続してアクセスされます。システムはこれをヒントに使用し、ファイルのキャッシュを最適化します。詳細については、Windows SDK の「CreateFile」で FILE_FLAG_SEQUENTIAL_SCAN の説明を参照してください。
解説
このコンストラクタは、例外をスローしないので、TRY/CATCH ロジックを使用しても意味がありません。Open メンバ関数を使って、例外状態を直接調べてください。例外処理の方法については、「例外処理 (MFC)」を参照してください。
このコンストラクタに引数 hFile だけを指定すると、hFile で識別される既存のオペレーティング システム ファイルに対応する CFile オブジェクトが作成されます。アクセス モードやファイルの種類はチェックされません。CFile オブジェクトが破棄されても、対応しているオペレーティング システム ファイルは閉じられません。この場合、ファイルを閉じる必要があります。
このコンストラクタに引数 hFile と lpszFileName を指定すると、CFile オブジェクトが構築され、指定されたパスにあるオペレーティング システム ファイルが開かれます。このコンストラクタは、先に説明したコンストラクタの関数に Open メンバ関数を組み合わせたものです。このコンストラクタは、ファイルを開くときにエラーが発生すると、例外をスローします。一般に、この例外がスローされた場合、発生したエラーは修復できないため、ユーザーに警告する必要があります。
使用例
既定のコンストラクタの使用例は、CFile::Open の説明を参照してください。例外をスローするコンストラクタの使用例は、CATCH の説明を参照してください。
HANDLE コンストラクタを使用するコード例を次に示します。このコードは、C:\MyFile.DAT という名前のファイルを作成し、"Hockey is best!" という ANSI 文字をそのファイルに書き込みます。
HANDLE hFile = CreateFile(_T("CFile_File.dat"),
GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Couldn't create the file!"));
}
else
{
// Attach a CFile object to the handle we have.
CFile myFile(hFile);
static const TCHAR sz[] = _T("I love CFile!");
// write string
myFile.Write(sz, sizeof(sz));
// We can call Close() explicitly, but the destructor would have
// also closed the file for us. Note that there's no need to
// call the CloseHandle() on the handle returned by the API because
// MFC will close it for us.
myFile.Close();
必要条件
ヘッダー : afx.h