怎么样才能实现定时复制文件?

mark2003 2006-09-13 11:53:42
有什么方法可以实现每天定时在某个时候拷贝指定的文件夹,例如是 d:\A 文件
夹里面的文件filename.xls,然后复制到e:\B文件夹里面,起名为
filename20060912这样,然后每天复制的时候都自动在名字后面加上当天日期以便区分。
...全文
475 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
dronly 2006-09-19
  • 打赏
  • 举报
回复
mark
wood542344 2006-09-19
  • 打赏
  • 举报
回复
楼上帖代码的都是高人。。。学习中,Timer用了基本就可以实现了。。
sunxiaohui 2006-09-19
  • 打赏
  • 举报
回复
使用计划任务,可以实现定时起动程序!
sunxiaohui 2006-09-19
  • 打赏
  • 举报
回复
直接写一段拷贝文件袋的代码,编译为程序,在系统定时起动中,指定时间,执行自己的程序,执行后退出程序,如使用Timer,程序一直在运行,会占一定的系统资源,对程序的稳定行要求较高!
gfh_79_0 2006-09-15
  • 打赏
  • 举报
回复
BlueDeepOcean(蓝色·深海)

if (Result == 3 * 60 * 60 * 1000)
有可能会导致不能每日都执行拷贝
建议改为
if (Result >= 3 * 60 * 60 * 1000)

To BlueDeepOcean(蓝色·深海)
你是铁岭人吗?
jone7319 2006-09-15
  • 打赏
  • 举报
回复
高人,MARK
Gavin001 2006-09-15
  • 打赏
  • 举报
回复
顶一下,学习学习
BlueDeepOcean 2006-09-14
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int R1,R2,Result;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
R1 = GetTickCount();
Timer1->Interval = 200;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
R2 = GetTickCount();
Result = R2 - R1;
if (Result == 3 * 60 * 60 * 1000)
{
CopyFile(AnsiString("d:\\a\\filename.xls").c_str(),AnsiString("e:\\b\\filename" + DateToStr(Date()) + ".xls").c_str(),false);
Result = 0;
}
}
//---------------------------------------------------------------------------
BlueDeepOcean 2006-09-14
  • 打赏
  • 举报
回复
楼上是纯粹地Windows编程哦。
xiaoshi0 2006-09-14
  • 打赏
  • 举报
回复
用Timer会增加程序的处理,用CreateWaitableTimer不会。

或者用CreateTimerQueueTimer也是可以的,这时不用自己创建线程,Windows会帮你创建一个,你只需要指定callback function就可以了,这个也不用增加Windows处理。
BlueDeepOcean 2006-09-14
  • 打赏
  • 举报
回复
写到服务中,上面代码也完全适用的。
BlueDeepOcean 2006-09-14
  • 打赏
  • 举报
回复
条条大路通铁岭嘛~~
xiaoshi0 2006-09-14
  • 打赏
  • 举报
回复
用CreateWaitableTimer函数创建一个内核对象,每一天通知一次。

然后创建一个线程等待该对象,用WaitForSingleObject

等到了就复制就好了。
zyyoung 2006-09-14
  • 打赏
  • 举报
回复
BlueDeepOcean(蓝色·深海) ( )的方法还是值得学习
zyyoung 2006-09-14
  • 打赏
  • 举报
回复
不好吧,写一个服务,每天在开机后,自动运行,判断时间间隔是否是一天,成立,就拷贝
YJS050320001 2006-09-14
  • 打赏
  • 举报
回复
跟踪学习
i_love_pc 2006-09-14
  • 打赏
  • 举报
回复
学习。
truelove7283159 2006-09-14
  • 打赏
  • 举报
回复
up
BlueDeepOcean 2006-09-14
  • 打赏
  • 举报
回复
这块有点问题:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
R2 = GetTickCount();
Result = R2 - R1;
if (Result == 3 * 60 * 60 * 1000)
{
CopyFile(AnsiString("d:\\a\\filename.xls").c_str(),AnsiString("e:\\b\\filename" + DateToStr(Date()) + ".xls").c_str(),false);
R1 = GetTickCount();
Result = 0;
}
}
//---------------------------------------------------------------------------
xiaoshi0 2006-09-14
  • 打赏
  • 举报
回复
程序启动以后,没有窗体,每天将c:\test.dat复制到d:\test.dat,由如下语句体现:

CopyFile(_T("c:\\test.dat"), _T("d:\\test.dat"), FALSE);

按Ctrl+F3取消应用程序的运行,因为注册了系统热键

RegisterHotKey(NULL, 2000, MOD_CONTROL, VK_F3);

你要想换别的目录,可以自己试着修改一下
加载更多回复(2)

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧