[問題] 透過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