最初に言及しなければならないのは、私は完全なC ++初心者なので、石を投げないでください。ShellExecuteを使用して外部プログラムを強制終了し、ログファイルをできるだけ簡単に削除したいと思います。Linuxではシステムを使用できます(そしてそれは完璧に動作します)が、Windowsでは迷惑なDOSボックスがポップアップします。多くのグーグルの助けを借りて、私はこのコードを書くことができました:
wchar_t command[1024] = L"b";
swprintf_s(command, _countof(command), L"/C TASKKILL /IM ExternalProgram.exe /F & del \"%S\"", logFilePath);
ShellExecute( NULL, L"open", L"cmd.exe", command, NULL, SW_HIDE );
logFilePathはcharです。このコードは、短いパスを使用している限り機能しますc:\MyProgram\logfile.txt
。ログファイルへのパスが長い場合、たとえばc:\program files\My Program\anything\more\xxx\...\logfile.txt
プログラムがクラッシュする場合。1024が変数の最大長であることは理解していますが、長さがわからないことをCに伝えるにはどうすればよいですか?
を使って回避しようとしましたstrlen(logFilePath)+50
が、コンパイルエラーしか発生しませんでした。正しい方法は何ですか?