论坛: 编程破解 标题: 286哥哥,请进来帮弟弟一下!!!!!还是老问题,可是总解决不了! 复制本贴地址    
作者: x1234521 [x1234521]    论坛用户   登录
小弟想编一个软件,目的是将网络上的一台服务器上的一个文件夹中的所有文件和子目录都拷贝到本地机器的一个目录下~(就是保持同步)
现在用FILECOPY是可以做到,但本人是想让复制的时候判断一下,如果文件存在,并且大小,名字,日期一样的话,就跳过不复制,请问应该如何实现,要在什么地方加判断!!

谢谢了,~!!!!




[此贴被 x1234521(x1234521) 在 08月27日13时25分 编辑过]

地主 发表时间: 04-08-16 10:59

回复: ProgramLive [coolcall]   论坛用户   登录
在打开文件夹的时侯列出文件清单->用比较的方法进行规定那个只复制一次

不过我想名字,和日期没必要,就比大小就行了


[此贴被 ProgramLive(coolcall) 在 08月16日12时13分 编辑过]

B1层 发表时间: 04-08-16 12:10

回复: 286 [unique]   版主   登录
前一段时间刚作过一个这样的程序。
实现可采用CFile。
CFile在打开的时候,可以读到名子,大小,日期。可以作个比较。
网络服务器可采用映射本地目录的方法访问。

B2层 发表时间: 04-08-16 12:50

回复: x1234521 [x1234521]   论坛用户   登录
286斑竹,能不能给个示例啊,小弟很想看看是如何实现的, ~!先谢谢了,我的信箱
liuqingting@21cn.com谢谢了,286!,你就是我的救星啊,呵呵 !~顶!!

B3层 发表时间: 04-08-19 15:17

回复: 286 [unique]   版主   登录
struct DATESTRUCT
{
int year,month,day,empty;//空处一般不用,可作为标识用。
};
struct TIMESTRUCT
{
int hour,minute,second,frame;
};
union TIMECODEUNION
{
int timearray[4];//按数组的方式访问。
DATESTRUCT datecode;
TIMESTRUCT timecode;
};

TIMECODEUNION CPlayServerDlg::GetFileLastModifyTime(CString filename)
{
CFile file;
TIMECODEUNION filetime;
for (int i=0;i<4;i++)
filetime.timearray[i]=-1;

CFileStatus status;

if (file.Open(filename,CFile::modeRead,NULL)==TRUE)
{//如果读文件修改时间出错,一般为另有用户正该写该文件。
file.GetStatus(status);
file.Close();

filetime.timecode.hour=status.m_mtime.GetHour();
filetime.timecode.minute=status.m_mtime.GetMinute();
filetime.timecode.second=status.m_mtime.GetSecond();
filetime.timecode.frame=0;
}
//如果正常读出,则返回文件修改时间,否则返回时分秒都是-1。调用者根据frame即可判断。

return filetime;
}

拷贝
for (i=0;i<m_CheckFileNum;i++)
{
RemoteFile=m_RemotePath+"\\"+FileList[i].fileName;
LocalFile=m_LocalPath+"\\"+FileList[i].fileName;

if (FileList[i].FromRemote2Local==TRUE)
{//从远端到本地
filetime=GetFileLastModifyTime(RemoteFile);
if (filetime.timecode.frame==-1) //如果读文件修改时间出错,此时另有用户正该写该文件。
continue;
if (filetime.timecode.hour!=FileList[i].FileTime.timecode.hour ||
filetime.timecode.minute!=FileList[i].FileTime.timecode.minute ||
filetime.timecode.second!=FileList[i].FileTime.timecode.second)
{//有新文件,复制,并将该时间作为最新时间。
FileList[i].FileTime.timecode.hour=filetime.timecode.hour;
FileList[i].FileTime.timecode.minute=filetime.timecode.minute;
FileList[i].FileTime.timecode.second=filetime.timecode.second;
//拷贝文件。
CopyFile(RemoteFile,LocalFile,FALSE);
m_Comment="从"+RemoteFile+"到"+LocalFile+"已复制";

m_NewXMLFile=TRUE;//激发线程去重新查找要播出的节目位置。

m_IsReadingXML=TRUE;//当XML文件很大时,可能会占很长时间,避免冲突。
ReadXMLContent();
m_IsReadingXML=FALSE;
}
}
else
{ //从本地到远端
filetime=GetFileLastModifyTime(LocalFile);
if (filetime.timecode.frame==-1) //如果读文件修改时间出错,此时另有用户正该写该文件。
continue;
if (filetime.timecode.hour!=FileList[i].FileTime.timecode.hour ||
filetime.timecode.minute!=FileList[i].FileTime.timecode.minute ||
filetime.timecode.second!=FileList[i].FileTime.timecode.second)
{//有新文件,复制
FileList[i].FileTime.timecode.hour=filetime.timecode.hour;
FileList[i].FileTime.timecode.minute=filetime.timecode.minute;
FileList[i].FileTime.timecode.second=filetime.timecode.second;

CopyFile(LocalFile,RemoteFile,FALSE);
m_Comment="从"+LocalFile+"到"+RemoteFile+"已复制";
}
}
}

B4层 发表时间: 04-08-19 17:37

回复: x1234521 [x1234521]   论坛用户   登录
286斑竹,谢谢了,太好了, ~
精彩的代码啊 ~

高,高,!

B5层 发表时间: 04-08-20 16:24

回复: x1234521 [x1234521]   论坛用户   登录
286哥哥,我又来了,~哎,小弟不才,不懂C++啊,我试图用了2天的时间把这些代码翻译到VB,可是怎么弄都是不好用,小弟实在是菜啊,286哥哥,麻烦你能给个VB的代码吗 ?
先谢谢了,哥哥~!!!

B6层 发表时间: 04-08-23 14:07

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号