除了通过cmd程序达到文件自删除以外,另一种方法就是通过Bat文件来完成文件自删除,代码如下:
#include<iostream>
#include<Windows.h>
using namespace std;
BOOL SuicideByBatFile();//文件自删除函数
int main()
{
SuicideByBatFile();
return 0;
}
BOOL SuicideByBatFile()
{
CHAR ProcessDirectory[MAX_PATH] = { 0 };
CHAR ProcessFullPath[MAX_PATH] = { 0 };
CHAR BatFileFullPath[MAX_PATH] = { 0 };
GetModuleFileNameA(0, ProcessFullPath, sizeof(ProcessFullPath)); //获得当前进程完整路径
GetCurrentDirectoryA(MAX_PATH, ProcessDirectory); // 获得文件的当前目录.
strcpy(BatFileFullPath, ProcessDirectory);
strcat(BatFileFullPath, "\\SuicideByBatFile.bat");
//创建Bat文件
HANDLE FileHandle = CreateFileA(BatFileFullPath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (FileHandle == INVALID_HANDLE_VALUE)
{
return FALSE;
}
CHAR v1[MAX_PATH] = { 0 };
CHAR v2[MAX_PATH] = { 0 };
sprintf(v1, "del %s\n", ProcessFullPath);//编写指令
sprintf(v2, "del %%0\n");//编写指令
//将指令写入Bat文件
DWORD ReturnLength = 0;
WriteFile(FileHandle, v1, strlen(v1), &ReturnLength, NULL);
WriteFile(FileHandle, v2, strlen(v2), &ReturnLength, NULL);
CloseHandle(FileHandle);
WinExec(BatFileFullPath, SW_HIDE);
return TRUE;
}