MFCでexe起動。終了を待つ。

CString exe_path;
exe_path = "c:\\hogehoge.exe";

SHELLEXECUTEINFO	sei = { 0 };
//構造体のサイズ
sei.cbSize = sizeof(SHELLEXECUTEINFO);
//起動側のウインドウハンドル
sei.hwnd = NULL;
//起動後の表示状態
sei.nShow = SW_SHOWNORMAL;
//このパラメータが重要で、セットしないとSHELLEXECUTEINFO構造体のhProcessメンバがセットされない。
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
//起動プログラム
sei.lpFile = exe_path.GetBuffer(0);

//実行ディレクトリ指定するなら
//sei.lpDirectory

// 実行時にパラメータつけるなら
//sei.lpParameters

//プロセス起動
if (!ShellExecuteEx(&sei) || (const int)sei.hInstApp <= 32) {
	// 失敗
	return;
}
//終了を待つ
WaitForSingleObject(sei.hProcess, INFINITE);

ネタ元

hp.vector.co.jp

CFileを使ったファイルの一発読み書き

読み

	CFile	f;
	CString writeData="";

	if ( f.Open("test.txt",CFile::modeRead)	==	TRUE)
	{
		unsigned int	flen = (unsigned int)f.GetLength();
		unsigned char *data = (unsigned char *)malloc(flen+1);
		if ( data	!= NULL )
		{
			f.Read(data,flen);
			data[flen]	=	0;
			writeData =	data; 
			free(data);
			f.Close();
		}
	}

書き

	CFile	f;
	CString writeData="abcdefg";
	if ( f.Open("test.txt",CFile::modeCreate | CFile::modeWrite)	==	TRUE)
	{
		f.Write(writeData.GetBuffer(),writeData.GetLength());
		f.Close();
	}

ネタ元

blog.goo.ne.jp

vectorの要素削除

// 0 〜 4が入ったvector型変数numbersを用意
std::vector<int> numbers {0, 1, 2, 3, 4};
    
// aとbを除きたい
int a = 1;
int b = 3;

// iteratorで内部要素を回し、該当値であればその要素を削除
for (auto itr = numbers.begin(); itr != numbers.end(); itr++)
{
    if (((*itr) == a) || ((*itr) == b))
    {
        numbers.erase(itr);
  break; 
    }
}

ネタ元

blog.dalt.me

SQLite には、データを一括挿入するための特別な方法はありません

SQLite には、データを一括挿入するための特別な方法はありません。 データの挿入または更新時に最適なパフォーマンスを得るには、以下を行ってください。

トランザクションの使用。
同じパラメーター化コマンドの再利用。 後続の実行で、最初の実行のコンパイルを再利用します。

ネタ元

docs.microsoft.com