需要个小c程序定时删除文件

需要个小c程序定时删除文件,第1张

总共有四步:

第一步:将下面的代码保存到C文件中,编译成一个EXE文件

========================================================

#include <windows.h>

#include <stdio.h>

#define FILENAME ("C:\\123.TXT")

#define SERVICENAME ("定时删除文件")

#define SLEEP_TIME (59*60*1000)//判断时间休眠间隔59分钟

SERVICE_STATUS ServiceStatus

SERVICE_STATUS_HANDLE hStatus

void ServiceMain(int argc, char** argv)

void ControlHandler(DWORD request)

int InitService()

void ControlHandler(DWORD request)

{

switch(request)

{

case SERVICE_CONTROL_STOP:

ServiceStatus.dwWin32ExitCode = 0

ServiceStatus.dwCurrentState = SERVICE_STOPPED

SetServiceStatus (hStatus, &ServiceStatus)

return

case SERVICE_CONTROL_SHUTDOWN:

ServiceStatus.dwWin32ExitCode = 0

ServiceStatus.dwCurrentState = SERVICE_STOPPED

SetServiceStatus (hStatus, &ServiceStatus)

return

default:

break

}

SetServiceStatus (hStatus, &ServiceStatus)

return

}

int InitService()

{

return true

}

void ServiceMain(int argc, char** argv)

{

int error

ServiceStatus.dwServiceType =

SERVICE_WIN32

ServiceStatus.dwCurrentState =

SERVICE_START_PENDING

ServiceStatus.dwControlsAccepted =

SERVICE_ACCEPT_STOP |

SERVICE_ACCEPT_SHUTDOWN

ServiceStatus.dwWin32ExitCode = 0

ServiceStatus.dwServiceSpecificExitCode = 0

ServiceStatus.dwCheckPoint = 0

ServiceStatus.dwWaitHint = 0

hStatus = RegisterServiceCtrlHandler(

SERVICENAME,

(LPHANDLER_FUNCTION)ControlHandler)

if (hStatus == (SERVICE_STATUS_HANDLE)0)

{

return

}

InitService()

ServiceStatus.dwCurrentState =

SERVICE_RUNNING

SetServiceStatus (hStatus, &ServiceStatus)

while (ServiceStatus.dwCurrentState ==

SERVICE_RUNNING)

{

Sleep(SLEEP_TIME)

SYSTEMTIME aTime

::GetLocalTime(&aTime)

if ( aTime.wHour == 12 )

{

DeleteFile(FILENAME)

}

}

return

}

void main(int argc, char* argv[])

{

SERVICE_TABLE_ENTRY ServiceTable[2]

ServiceTable[0].lpServiceName = SERVICENAME

ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain

ServiceTable[1].lpServiceName = NULL

ServiceTable[1].lpServiceProc = NULL

StartServiceCtrlDispatcher(ServiceTable)

}

========================================================

第二步:把这个生成的EXE文件拷贝到C:\WINDOWS\SYSTEM32下面

第三步:编写一个BAT文件(批处理文件),内容如下:(假如刚才生成的EXE文件名字为deletefile.exe)

sc create 定时删除文件 binpath= c:\WINDOWS\SYSTEM32\deletefile.exe

net start 定时删除文件

最后:如果想停止定时删除,则可以到系统里面的"服务"中去停止如果想删除服务的话就在CMD对话框中输入:

sc delete 定时删除文件

并运行即可.

要用到windows计划任务和批处理的组合。

1.先写一个批处理文件负责删除你建的那个文件夹。新建一个txt文本文件,在里面写上:

@echo 注:例子是如果你想删除C:\123\A文件夹,这里的文件夹路径请按需要修改,然后清空回收站

rd /s /q C:\123\A

attrib -h -s -r "C:\RECYCLER\S-1-5-21-1343024091-57989841-1417001333-500"

rd/s/q "C:\RECYCLER\S-1-5-21-1343024091-57989841-1417001333-500"

将此文档另存为批处理文件,比如叫【删除文件夹.cmd】

2.添加计划任务.

a.单击“开始→所有程序→附件→系统工具”,然后单击“任务计划”。再双击“添加任务计划”图标,双击它。这时候d出一个计划任务对话框。

b.接着我们按照“任务计划向导”的提示,单击“下一步”按钮。这时候会出现很多软件,你可以选择一个要计划执行的软件,这里我们点【浏览】按钮,选择你的批处理文件目录,比如【C:\删除文件夹.cmd】。

c.再点击“下一步”按钮就会让你对这个计划运行限定启动时间,当然你的要求是1个月一次,那就选【每月】。在“下一步”选择什么时候要执行这个任务,当然是根据自己的实际需求来选择。

d.接下来就要对这个计划任务输入密码,就是你的windows登陆密码,当然也可以不用输入,,不过最好输入这样保险。

到一个月你设置的时间点上系统就自动删除你建的那个文件夹。

windows用这个脚本,例如我要删掉D盘test里的一天前的修改文件:

forfiles /p "d:\test" /s /m *.* /d -1 /c "cmd /c del @path"

具体你可以百度下forfiles的用法


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11871680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存