MFCの基礎 - ファイル

提供:MochiuWiki : SUSE, EC, PCB
2019年8月29日 (木) 17:43時点における192.168.1.23による版 (→‎ファイルを開く)
ナビゲーションに移動 検索に移動

ファイルを開く

 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 表示されるダイアログボックスで『はい』または『すべて』を選択する