[問題] 透過system() 刪除檔案
開發平台(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() <----此段顯示的文字為:
(透過debug產生的)
Del C:\\LGPO\\Debug\\LGPO_Machine_word.txt
實際實驗直接指定路徑刪除是可行
system("Del C:\\LGPO\\Debug\\LGPO_Machine_word.txt");
下圖為資料夾路徑
https://imgur.com/vLrWKDG

但不知道為什麼換了這樣寫就無法刪除..... 想請各位大神給我點指示
system(LGPO_Order.Del_Machine_Order().data());
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.102.123 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1562319950.A.E9C.html
→
07/05 19:27,
6年前
, 1F
07/05 19:27, 1F
→
07/05 22:13,
6年前
, 2F
07/05 22:13, 2F
→
07/05 23:00,
6年前
, 3F
07/05 23:00, 3F
→
07/06 00:19,
6年前
, 4F
07/06 00:19, 4F
→
07/06 00:19,
6年前
, 5F
07/06 00:19, 5F
→
07/06 00:19,
6年前
, 6F
07/06 00:19, 6F
→
07/06 00:19,
6年前
, 7F
07/06 00:19, 7F
→
07/06 00:20,
6年前
, 8F
07/06 00:20, 8F
→
07/06 00:20,
6年前
, 9F
07/06 00:20, 9F
→
07/06 00:20,
6年前
, 10F
07/06 00:20, 10F
推
07/06 09:25,
6年前
, 11F
07/06 09:25, 11F
謝謝各位大大,找到原因了,因為我是直接做String 傳入system
而system真的直接判斷了內容為:
Del C:\\LGPO\\Debug\\LGPO_Machine_word.txt
因此系統才會看不懂,我把string GetFilePath()會產生雙斜線
改成了單斜線,使其產生變成:
Del C:\LGPO\Debug\LGPO_Machine_word.txt
這樣就有生效了@@ 真是奇怪
看來是唯有在 " " 內的,才要用雙斜線,不是的就要用單斜線
※ 編輯: jayzhuang (218.161.102.123 臺灣), 07/09/2019 10:08:04
→
07/09 10:09,
6年前
, 12F
07/09 10:09, 12F
推
07/09 20:56,
6年前
, 13F
07/09 20:56, 13F
→
07/09 20:56,
6年前
, 14F
07/09 20:56, 14F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
33
68