|
![]() | 作者: x1234521 [x1234521]
![]() |
登录 |
下面的是286斑竹写的代码,可我要VB的哦,286哥哥,可能最近忙,没时间来,哪位哥哥,可以帮帮小弟,把他翻译成VB的,不盛感激! 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+"已复制"; } } } 可参看: http://www.20cn.net/cgi-bin/club/show.pl?key=xUULiTnVJeEu&cat=tech&forum=code&page=2&position=3607&id=1092625191 [此贴被 x1234521(x1234521) 在 08月29日10时47分 编辑过] |
地主 发表时间: 04-08-29 10:44 |
![]() | 回复: 286 [unique] ![]() |
登录 |
我那上面给的都是程序段,你应该分析原理,而不是要代码本身。 真正值得你关注的地方如下: 1 获得文件最后修改日期时间,我采用的方法是“打开文件、获得文件属性、马上关闭文件”三个步骤,另有一个API可以直接读取文件属性,但我感觉那种方式不如我这种“笨”方法,这里你只需查找VB下文件打开并获得属性的方式。 2 拷贝初始化如下:事先建议一个拷贝文件列表,该列表每一项包括要拷的文件的文件名,源目地址,拷贝方向(由源到目,还是由目到源),文件的最新日期时间,并把最新日期时间都置为0,这样第一次执行时,就能实现拷贝。 3 拷贝过程如下,依次判断拷贝文件列表中的文件属性,依次从源目地址及文件名中找到实际文件,并读属性,然后把属性与拷贝文件列表中的存的属性作比较,不同则拷贝,相同(说明并没有新的文件)则不拷拷贝。 4 把3列入到定时器中,定时判断就行了。 没那么复杂,由于我的代码是我作的程序的很小一部分,所以其中有很多部分是多余的,你不一定非按其格式修改。 |
B1层 发表时间: 04-08-30 09:49 |
![]() | 回复: x1234521 [x1234521] ![]() |
登录 |
286哥哥,谢谢你 ~ 我会努力去写的,你给的思路很好,我很欣赏,~不多说了,写代码去了, ~ ![]() ![]() |
B2层 发表时间: 04-08-30 11:08 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号