//INIファイル名作成 dirとiniFileNameはchar変数
GetCurrentDirectory( MAX_PATH, dir);
wsprintf(iniFileName, "%s%s", dir, "\\setup.ini");
UINT WInt;
char WBuf[20];
WInt = GetPrivateProfileInt("Section_name", "Key_name1",
0, iniFName); //←0がデフォルト値
GetPrivateProfileString("Section_name", "Key_name2", "デフォルト値", WBuf, sizeof(WBuf), iniFileName);
CString WCStr;
WCStr.Format("%d", SetData);
WritePrivateProfileString("Section_name", "Key_name",
WCStr, iniFileName);
int WInt;
char WStr[20];
…
CWinApp* pApp = AfxGetApp(); //CWinAppオブジェクト
pApp->WriteProfileInt("Section_name", "Key_name1",
WInt);
pApp->WriteProfileString("Section_name", "Key_name2", WStr)
int WInt;
char WStr[20];
CWinApp* pApp = AfxGetApp();
int型変数名 = pApp->GetProfileInt("Section_name", "Key_name1",
0★デフォルト値);
文字列変数名 = pApp->GetProfileString("Section_name", "Key_name2",
NULL★デフォルト値)
char FName[256];
OPENFILENAME ofn;
FName[0] = NULL;
memset(&ofn, 0, sizeof(OPENFILENAME)); //構造体をゼロクリア
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFilter = "電圧データ(*.smz)\0*.smz\0\0";
ofn.lpstrFile = FName;
ofn.nMaxFile = sizeof(FName);
ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
ofn.lpstrDefExt = "smz"; //デフォルトの拡張子
if(!GetOpenFileName(&ofn)){
return;
}
ofn.lpstrFile = FName; //フルパス ex) "c:\xxx\zzz\aaa.smz"
ofn.nMaxFile = sizeof(FName);
ofn.lpstrFileTitle = FTitle; //ファイル名のみ ex) "aaa.smz"
ofn.nMaxFileTitle = sizeof(FTitle);
◆FlagsにOFN_NOCHANGEDIRを指定すると、カレントディレクトリが移動しない。
char FName[256];
OPENFILENAME ofn;
FName[0] = NULL;
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFilter = "電圧データ(*.smz)\0*.smz\0\0";
ofn.lpstrFile = FName;
ofn.nMaxFile = sizeof(FName);
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR;
ofn.lpstrDefExt = "smz"; //デフォルトの拡張子
if(!GetSaveFileName(&ofn)){
return;
}
●拡張子が「.SMZ」のファイルの選択時
OPENFILENAME ofn;
CListBox FileList; //ファイル名一覧
CString DirName; //フォルダ名
char *FNamePtr = …; //ファイル名へのポインタ
int WPos;
…
ofn.flag = OFN_ALLOWMULTISELECT | //複数選択を可能にする
OFN_FILEMUSTEXIST | //既存のファイル名のみ指定可能
OFN_PATHMUSTEXIST; //有効なパス及びファイル名しか入力できない
ofn.lpstrFilter = "電圧データ(*.smz)\0*.smz\0\0";
ofn.lpstrDefExt = "smz"; //デフォルトの拡張子
…
GetOpenFileName( … ) //ファイル名選択
…
//フォルダ名取出し
DirName = FNamePtr;
if(DirName.Find(".smz", 0) != -1){
//先頭文字列内に拡張子が含まれる(1ファイル選択時)
WPos = SelDirName.ReverseFind('\\');//最後の\を探す
FNamePtr += (WPos + 1);
FileList.AddString(FNamePtr);
DirName.TrimRight(FNamePtr - 1);
}else{ //複数ファイル選択時
FNamePtr += (strlen(FNamePtr) + 1);
//ファイル名一覧取出し
while(strlen(FNamePtr) > 0){
FileList.AddString(FNamePtr);
FNamePtr += (strlen(FNamePtr) + 1);
}
}
CFile TxtFile;
BOOL FileOpened;
FileOpened = TxtFile.Open(FILE_NAME, CFile::modeCreate | CFile::modeWrite);
FileOpened = TxtFile.Open(FILE_NAME, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite);
if(FileOpened)
TxtFile.SeekToEnd(); //ファイルの終わりにシークする
else
… //エラー処理
CFile TxtFile;
BOOL FileOpened;
if(!TxtFile.Open(FILE_NAME, CFile::modeRead){
//ファイルオープンエラー処理
}
int FLength = TxtFile.GetLength();
//char *ReadBuf = (char *)malloc(FLength + 1);
char *ReadBuf = new char[FLength + 1]; //newの場合、→delete[] ReadBuf;
if(ReadBuf == NULL){
//メモリ不足エラー処理
}
RLength = TxtFile.Read(ReadBuf, FLength); //戻り値は実際に読み込んだサイズ
if(RLength != FLength){
//読み込みエラー処理
}
ReadBuf[FLength] = 0; //バッファの終わり
TxtFile.Close();
CFileDialog FDlg(false, "csv", "*.csv", OFN_OVERWRITEPROMPT
| OFN_NOCHANGEDIR,
"CSV形式ファイル(*.csv)\0*.csv\0\0",
NULL);
if(FDlg.DoModal() == IDOK){
CString FName = FDlg.GetPathName(); //指定されたファイルパス取得
・
・
・
}
CFileStatus FSts;
if(CFile::GetStatus("ファイル名", FSts))
//ファイルが存在する
…
else
//ファイルが存在しない
…
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")
…
if(PathIsDirectory(m_DirName)){ //フォルダが存在する
…
}
◆shlwapi.libをリンクすること。
//BMPファイルを開くときの例
UpdateData(TRUE);
CFileDialog FDlg(true, "bmp", "*.bmp",
OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR,
"画像ファイル(*.bmp)|*.bmp||", NULL);
FDlg.m_ofn.lpstrInitialDir = m_FileName.GetBuffer(20); //デフォルト
if(FDlg.DoModal() == IDOK){
m_FileName = FDlg.GetPathName();
UpdateData(FALSE);
}
◆Windows7では、デフォルトフォルダの設定ができないようだな。
//バッファ確保
int BufLen = MAX_PATH * 100;
char *pBuf = new char[BufLen];
ZeroMemory(pBuf, BufLen);//ゼロクリア
CFileDialog FDlg(true, "", "",
OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,
"すべてのファイル(*.*)|*.*||", NULL);
FDlg.m_ofn.lpstrFile = pBuf;//バッファアドレス
FDlg.m_ofn.nMaxFile = BufLen;//バッファサイズ
if(FDlg.DoModal() == IDOK){
//ファイルパス取得
CString FilePath;
POSITION Pos = FDlg.GetStartPosition();//先頭ポジション取得
while(pos){
FilePath = FDlg.GetNextPathName(pos);//ファイルパスと次のポジション取得
//リストなどに追加する
}
}
delete[] pBuf;
◆CreateDirectory関数は、親フォルダが存在しないとフォルダを生成してくれない。MakeSureDirectoryPathExists関数は途中のフォルダも生成してくれる。