如何進行文件的比較?

xhwu3721 2003-12-25 10:51:41
我下載了一個CFindDir類,但是對於其的文件比較的函數不知如何使用,,
我的程式要實現的功能是:下載指定目錄下的文件到目的磁碟,然後進行比較,看是否下載正
確,有沒有什麼比較好的辦法呢?
這個函數能用嗎?其中的tpf參數是指什麼?

BOOL CFindDir::FunCompFileTpf(CString tpf, CString filename)
{
LPTSTR cfn,cfi,lptTemp;
int n;
cfi=tpf.GetBuffer(tpf.GetLength());
cfn=filename.GetBuffer(filename.GetLength());
while(*cfn && *cfi)
{
if(*cfi=='?') {cfi++; cfn++;}
else
if(*cfi=='*')
{
cfi++;
cfn++;
n=0;
while(*cfn)
{
if(*cfn==*cfi)
{
lptTemp=cfn;
n=1;
}
cfn++;
}
if(n==1) cfn=lptTemp;
if((*cfn=='\0')&&(*cfi!='\0')) return FALSE;
}
else
{
if(*cfn != *cfi)return FALSE;
else
{
cfn++; cfi++;
}
}
}
if(*cfn == '\0' && *cfi =='\0') return TRUE;
else return FALSE;

}

還有,CFindDir類好象有點問題,我通過判斷文件大小來進行比較,如果我的目標磁盤上有
許多文件(3G),要找很久,並且它還出錯.其實我拷貝是到目標盤的根目錄下,為什麼它會找
那麼久,而且還出錯呢,但是如果我拷貝在根目錄下的一個子目錄中就不會出錯,真不知為什麼?
dlg->m_Result.SetWindowText("Verifying...");

for(i=0;i<iTotal_File_Counts;i++)
{
my.FunReset();
// my.FunSetDirExt(ComparedFileDirectory,Mp3List[i].strFileName);
my.FunSetDirExt(CopyToDirList[p->array].strCopyToDiskDir,Mp3List[i].strFileName);
my.FunSetSize(TRUE,-1,-1);
if(my.FunFindFile(1))
iDstFileSize+=my.FunGetFindSize();
}

if((iSrcFileSize==iDstFileSize)&&(iSrcFileSize!=0)&&(iDstFileSize!=0))
{
dlg->m_Result.SetTextColor(RGB(0,0,255));
dlg->m_Result.SetWindowText("Verify Successful");
dlg->m_Result.SetWindowText("PASS");
}
...全文
90 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
afantict 2003-12-25
  • 打赏
  • 举报
回复
1,文件名
2,大小
3,日期属性
这三个应该就差不多了
xhwu3721 2003-12-25
  • 打赏
  • 举报
回复
大俠有個例了嗎?
victor_cui 2003-12-25
  • 打赏
  • 举报
回复
比较文件是否相同肯定不能简单的通过比较大小来实现,最保险的方式当然是比较内容,但是这很费时间,可行的办法是首先比较大小,如果大小相同在对两个文件作校验和,如CRC,MD5,SHA等,如果都校验和也相等,基本就可以断定两个文件内容相同了
xhwu3721 2003-12-25
  • 打赏
  • 举报
回复
大俠們能否幫忙看看這個問題:

還有,CFindDir類好象有點問題,我通過判斷文件大小來進行比較,如果我的目標磁盤上有
許多文件(3G),要找很久,並且它還出錯.其實我拷貝是到目標盤的根目錄下,為什麼它會找
那麼久,而且還出錯呢,但是如果我拷貝在根目錄下的一個子目錄中就不會出錯,真不知為什麼?
阿甘 2003-12-25
  • 打赏
  • 举报
回复
还有,这个FunCompFileTpf不是比较文件,而是检查文件名filename是否符合tpf(通配符)
ahao 2003-12-25
  • 打赏
  • 举报
回复
no way,除非远端给出了文件校验值
阿甘 2003-12-25
  • 打赏
  • 举报
回复
楼主好像是需要在下载前比较文件呢,最好对大文件提供一个hash的小文件,不然就得全部下载才能够进行比较了

现在网上流行的ftp的校验方式可以参考一下,它使用的是sfv文件,里面保存了同目录下其它文件的md5码,当下载结束后,对下载了的文件重新计算md5码,比较它们是否相同得到结论
alvachien 2003-12-25
  • 打赏
  • 举报
回复
哈哈,推荐.Net,它通过Hash码和Key唯一标志一个文件。
victor_cui 2003-12-25
  • 打赏
  • 举报
回复
1,文件名
2,大小
3,日期属性
这三个应该就差不多了

这样处理当然是错误的,因为日期不同的内容不一定不相同,大小和文件名相同的未必相同

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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