首先我必须提到,我是一个绝对的 C++ 初学者,所以不要扔任何石头。我想在 ShellExecute 的帮助下杀死一个外部程序并尽可能简单地删除一个日志文件。在 linux 上我可以使用系统(并且它运行良好),但在 windows 上会弹出一个烦人的 dosbox。在很多谷歌的帮助下,我设法编写了这段代码:
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 是字符。只要我使用短路径,此代码就可以工作,例如c:\MyProgram\logfile.txt
. 如果日志文件的路径较长,例如c:\program files\My Program\anything\more\xxx\...\logfile.txt
程序崩溃。我知道,1024 是变量的最大长度,但是我如何告诉 C 我不知道长度?
我试图通过使用来解决它,strlen(logFilePath)+50
但这只会给我编译错误。正确的方法是什么?