MFCの基礎 - ファイル
ナビゲーションに移動
検索に移動
ファイルを開く
CFile File;
if(File.Open(_T("test.dat"), CFile::modeCreate| CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText))
{
// To do something
}
file.Close();
第1引数はファイル名、第2引数はファイルモードを指定する。
主なモードを以下に記載する。
CFile::modeCreate ファイルを新規に作成する。既にファイルがある場合も削除して新規に作成する。
CFile::modeNoTruncate modeCreateと組み合わせて使用すると既にファイルがある場合は新規作成せずに開く。
CFile::modeRead ファイルを読み取り専用で開く。
CFile::modeReadWrite ファイルを読み書き可能で開く。
CFile::modeWrite ファイルを書き込み専用で開く。
CFile::shareDenyNone 他プロセスからも読み書きできる状態でファイルを開く。
CFile::shareExclusive ファイルを排他モードで開く。
CFile::typeText テキストモードを設定する。派生クラスで使う。
CFile::typeBinary バイナリモードを設定する。派生クラスで使う。
1行ずつ読み込む
CStdioFile File(_T("test.dat"), CFile::modeCreate| CFile::modeNoTruncate | CFile::modeRead | CFile::typeText);
CString strReadLine = _T("");
while(File.ReadString(strReadLine))
{
TRACE(strReadLine + _T("\n"));
}
ファイルに書き込む
CStdioFile File(_T("test.dat"), CFile::modeCreate| CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText);
CString strWriteLine1 = _T("hoge\n");
File.WriteString(strWriteLine1);
CString strWriteLine2 = _T("piyo\n");
File.WriteString(strWriteLine2);
File.Close();
ファイルに追記する
CFileおよびCStdioFileには追記モードが存在しないので、ファイルを開いた後、書き込み位置を指定する必要がある。 下記のサンプルコードでは、ファイルを書き込みモードで開いた後、SeekToEndメソッドで書き込み位置を最後尾に移動する。
CStdioFile File(_T("test.dat"), CFile::modeCreate| CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText);
File.SeekToEnd(); // 書き込み位置を最後尾に移動
CString strWriteLine1 = _T("hoge\n");
File.WriteString(strWriteLine1); // Write a line
CString strWriteLine2 = _T("piyo\n");
File.WriteString(strWriteLine2); // Write a line
File.Close();
ファイルを削除する
// 単一のファイルを削除する
CFile::Remove(_T("C:\\test.txt")); // Cドライブ直下のtest.txtファイルを削除する
// 複数のファイルやディレクトリを削除する
CString strRemoveDirPath = _T("C:\\test?");
strRemoveDirPath.SetAt(strRemoveDirPath.GetLength() - 1, 0);
SHFILEOPSTRUCT drive = {};
drive.hwnd = this->m_hWnd; // ウィンドウハンドル
drive.wFunc = FO_DELETE; // 実行する操作
drive.pFrom = strRemoveDirPath; // 対象ファイル名
drive.pTo = NULL; // 目的ファイル名
drive.fFlags = FOF_ALLOWUNDO; // フラグ
SHFileOperation(&drive);
wFuncは、下記に示す通り、実行する操作を指定する。
命令マクロ | 説明 |
---|---|
FO_MOVE | pFromをpToの位置に移動 |
FO_COPY | pFromをpToの位置にコピー |
FO_DELETE | Fromを削除 |
FO_RENAME | pFromをpToに変更 |
pFromにはディレクトリおよびファイルを指定する。ワイルドカードも使用できる。
また、NULL文字(\0)で区切ると複数指定できる。
fFlagは、下記に示す通り、動作時のフラグを指定する。
命令マクロ | 説明 |
---|---|
FOF_SILENT | 経過を表すダイアログボックス非表示 |
FOF_ALLOWUNDO | 削除の場合はゴミ箱に移動 |
FOF_NOERRORUI | エラーが発生した場合はUI非表示 |
FOF_NOCONFIRMATION | 表示されるダイアログボックスで『はい』または『すべて』を選択する |