论坛: 编程破解 标题: 求语言转换(c++―>vb) 复制本贴地址    
作者: 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号