[问题] 透过system() 删除档案

楼主: jayzhuang (Jay)   2019-07-05 17:45:46
开发平台(Platform): (Ex: Win10, Linux, ...)
Windows
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VS2019
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
无法透过system()删除我指定的档案
喂入的资料(Input):
预期的正确结果(Expected Output):
删除掉档案
错误结果(Wrong Output):
没反应,档案依旧还在。
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
因为我有先写了一个Function为 (//删除档名,只获得路径字串)
string GetFilePath()
{
TCHAR _szFilePath[MAX_PATH + 1] = { 0 };
GetModuleFileName(NULL,_szFilePath,MAX_PATH);
(_tcsrchr(_szFilePath, _T('\\')))[1] = 0; //删除档名,只获得路径字串
string strPath;
for(int n = 0; _szFilePath[n];n++)
{
if (_szFilePath[n] != _T('\\'))
{
strPath += _szFilePath[n];
}
else
{
strPath += ("\\\\");
}
}
return strPath;
}
之后写一个clsss,此内容显示的为删除我要的档案LGPO_Machine_word.txt
因为档案出现都是与执行档同一个路径
(自动跑出,要能自动删除)
此类别为删除的指令
class Class_LGPO_Order{
public:
string Del_Machine_Order() { return Machine_Txt_Del; }
private:
string Machine_Txt_Del = "Del " + GetFilePath() + "LGPO_Machine_word.txt";
}
主程式内写的
void WINAPI ServiceMain(int argc, char** argv){
(中间很多是Windows Service需要的程式码就不显示)
关键在这:
while (true)
{
// 执行删除
system(LGPO_Order.Del_Machine_Order().data());
}
}
补充说明(Supplement):
上述的LGPO_Order.Del_Machine_Order().data() <
作者: firejox (Tangent)   2019-07-05 19:27:00
"\\"为 '\\' '\0'的字串
作者: eye5002003 (下一夜)   2019-07-05 22:13:00
建议使用boost.filesystem 别自己处理
作者: sarafciel (Cattuz)   2019-07-05 23:00:00
windows的system有吃string?
作者: stucode   2019-07-06 00:19:00
先忽略硬把 TCHAR 塞给 char 这件事的话,原 PO 的问题主要是不清楚 string 跟 string literal 的差别。比较看看下面两行输出的差异应该就知道问题在哪:cout << GetFilePath() << endl;cout << "C:\\LGPO\\Debug\\" << endl;不过删除档案可以像 2F 建议的用 std::filesystem 之类处理会比用 system() 来的好。
作者: ando5566 (风云变色)   2019-07-06 09:25:00
OS authentification 可能也会造成失效
楼主: jayzhuang (Jay)   2019-07-09 10:09:00
谢谢大家,已解决
作者: ando5566 (风云变色)   2019-07-09 20:56:00
\是用在特舒字符前特殊

Links booklink

Contact Us: admin [ a t ] ucptt.com