各位大虾,现在我有个问题需要问一下。我想复制一个文件夹的文件(源文件夹,比如c:\temp)到另外一个文件夹(目标文件夹,比如d:\temp)里,当存在相同文件名的文件时(比如c:\temp\test\test.cpp,和d:\temp\test\test.cpp),要求仅当源文件的最后修改时间比目标文件的最后修改时间迟时,才覆盖这个文件。请问怎么实现?多谢
解决方案 »
- 安装Microsoft Barcode Control 9.0 但是没有显示怎么解决?
- 诚恳请问高手几个问题
- 有没有 <<vsiual c++数字图象图形处理>>向世明 编写书的光盘,小弟的光盘不小心损坏了,哪位大侠有,发一份。
- GPRS 模块通讯之流量疑问?
- 急需一个MD5.dll
- 请问:在VC的全局多线程中,如何访问其他对象(比如CView对象)的方法和成员数据?
- 工程中用到了winsock控件,进行通讯(UDp协议),打包安装到\没有vc的环境中,出现"网络子系统失败的"错误,我少打了那个文件?!!如何解决\????
- No Such File Or Directory
- 在使用BindIoCompletionCallback进行IOCP开发是,如何指定CompletionKey?
- 完全照抄别人的程序,为什么我的不能运行
- 使用SINK_ENTRY_INFO宏时的问题:怎么知道宿主程序的DISPID?
- 怎么让dialog总在最上面?
CFileFind find;
CFile file;
CFileStatus srcfilestatus,dstfilestatus;
int nOK = find.FindFile(c:\\temp\\*.*);
while(nOK)
{
nOK = find.FindNextFile();
if(find.IsDots())continue;
if(find.IsDirectory())
{
//调用自身递归
}
else
{
if(file.Open(str,CFile::modeRead))
{
file.GetStatus(srcfilestatus);
file.Close();
}
if(file.Open(str1,CFile::modeRead))
{
file.GetStatus(dstfilestatus);
file.Close();
}
if(dstfilestatus.m_mtime >= srcfilestatus.m_mtime)
::CopyFile(str,str1,1);
}
} 大概的帮你写了一下,如果有问题给我留言或加我MSN :[email protected]
LPSHFILEOPSTRUCT lpFileOp
); Copies, moves, renames, or deletes a file system object. Returns zero if successful, or nonzero otherwise.
lpFileOp
Address of an SHFILEOPSTRUCT structure that contains information this function needs to carry out the specified operation.
得到的结构里面有标记修改时间的字段,叫m_mtime
//说明:对比文件的修改日期
//参数:1.做比较的目标文件路径 2. 要做比较的源文件路径
//返回:目标修改日期大于源文件修改日期,返回1,否则返回0
//-----------------------------------------------------------------------------------------------------------
int ContrastFile(CString dst,CString src)
{
CFile file;
CFileStatus srcfilestatus,dstfilestatus; if(file.Open(src,CFile::modeRead)) //读取源文件的文件属性
{
file.GetStatus(srcfilestatus);
file.Close();
}
if(file.Open(dst,CFile::modeRead)) //读取目标文件的文件属性
{
file.GetStatus(dstfilestatus);
file.Close();
}
if(dstfilestatus.m_mtime > srcfilestatus.m_mtime) //目标文件和源文件对比修改日期
return 1;
return 0;
}//-----------------------------------------------------------------------------------------------------------
//说明:用作递归
//参数:1. 目标文件及递归路径 2. 要做比较的文件
//返回:无
//-----------------------------------------------------------------------------------------------------------
void Resu(CString dst,CString src) //递归函数
{ CFileFind find;
CString dir = src;
int nOK = find.FindFile(dst);
while(nOK)
{
nOK = find.FindNextFile(); //继续查找下一文件
if(find.IsDots())continue; //如果查到文件为 [.] 或 [..] 则忽略
if(find.IsDirectory())
{
CString tmp = find.GetFilePath(); //如果查到为文件夹,则在文件夹后面加上 \*.* if(src.ReverseFind('\\')==src.GetLength())src += '\\';
dir += tmp.Mid(gi_mlen); //注意这里,最好以递归名做截取操作(截取一个变量)
CreateDirectory(dir,NULL);
tmp.Insert(tmp.GetLength(),"\\*.*");
Resu(tmp,src); //用来做继续递归调用
}
else
{
CString tmp = find.GetFilePath(); //如果查找到的 是文件类型
tmp.MakeLower(); //将路径转换成小写 (主要用作字符串对比) dir = src+tmp.Mid(gi_mlen); if(ContrastFile(tmp,dir)) //对比文件目标日期是否新于原文件日期
CopyFile(tmp,dir,1); //第三个参数为1 = 覆盖式拷贝
}
}
}