尝试使用 CreateProcessA 删除 Temp 目录中的文件

问题描述 投票:0回答:2

您好,我正在尝试使用以下代码删除文件:

CreateProcessA(NULL, (LPSTR)"del /f C:\\Users\\samee\\AppData\\Local\\Temp\\tempFile.txt", 0, 0, true, CREATE_NO_WINDOW, 0, 0, &si, &pi);

但是这不起作用。这里做错了什么?

c++
2个回答
2
投票

del
不是可以直接运行的可执行文件。 它是
cmd.exe
shell 的内置命令。 因此,您需要运行
cmd.exe
,使用其
/C
/K
参数来执行 shell 命令,例如:

char cmdLine[] = "cmd.exe /C del /f C:\\Users\\samee\\AppData\\Local\\Temp\\tempFile.txt";
CreateProcessA(NULL, cmdLine, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);

但是为什么要这么做呢? Win32 API 有一个

DeleteFileA()
函数,您应该使用它,例如:

DeleteFileA("C:\\Users\\samee\\AppData\\Local\\Temp\\tempFile.txt");

请注意,

/f
del
参数允许删除只读文件。如果
DeleteFileA()
由于文件是只读而失败,则只需删除只读标志即可,例如:

char fileName[] = "C:\\Users\\samee\\AppData\\Local\\Temp\\tempFile.txt";

DWORD attr = GetFileAttributesA(fileName);
if ((attr != INVALID_FILE_ATTRIBUTES) && (attr & FILE_ATTRIBUTE_READONLY))
    SetFileAttributesA(fileName, attr & ~FILE_ATTRIBUTE_READONLY);

DeleteFileA(fileName);

0
投票

我怎么看,你尝试使用命令“del”来删除文件。我更经常使用命令

system
:

#include <windows.h>
#include <iostream>

int main() {
std::cout << "use command \"del\"";
system("del /f C:\\Users\\samee\\AppData\\Local\\Temp\\tempFile.txt");
}

这里使用cmd窗口

© www.soinside.com 2019 - 2024. All rights reserved.