zhou_hengbao_smile 2014-08-04 01:49 采纳率: 0%
浏览 1731

关于CFindFile FindNextFile方法。急!!!在线求助

BOOL CZip::RestoreFileName(CString sDirectory)
{

CFileFind ff;
BOOL bFound = ff.FindFile(sDirectory + _T("\\*.*"));
TCHAR newName[260];
CString sNoteDirectory = sDirectory;
sNoteDirectory += _T("\\note.ini");
CString oldName, oldPath;
int i = 0;
while (bFound)
{
    bFound = ff.FindNextFile();
    if (ff.IsDots())
    {       
        continue;
    }
    if (ff.IsDirectory())
    {
        oldName = ff.GetFilePath();
        RestoreFileName(oldName);

    }
    else
    {

        oldName = ff.GetFileName();

        if (oldName == _T("note.ini"))
        {
            continue;
        }
        oldPath = ff.GetFilePath();
        GetPrivateProfileString(_T("note"),oldName,_T(""),newName,256,sNoteDirectory);
        if (!_tcscmp(newName, _T("")))
        {
            return TRUE;
        }
        CFile::Rename(oldPath,sDirectory+_T("\\")+newName);
    }

}
    return TRUE;

}

BOOL CZip::ModifyFileName(CString sDirectory)
{

CFileFind ff;
BOOL bFound = ff.FindFile(sDirectory + _T("\\*.*"));
int i = 0;
CString sNoteDirectory = sDirectory;
sNoteDirectory += _T("\\note.ini");
CString oldPath, oldName, sExtension, newPath,newName;
int pos, iCount;

while (bFound)
{   
    bFound = ff.FindNextFile();
    if (ff.IsDots())
    {
        continue;
    }
    if (ff.IsDirectory())
    {
        oldPath = ff.GetFilePath();
        ModifyFileName(oldPath);
    }
    else
    {

        oldName = ff.GetFileName();
        oldPath = ff.GetFilePath();
        pos = oldName.Find('.');
        sExtension = oldName.Mid(pos);
        srand(i);
        i++;
        iCount = 100 + rand()%(1000-100+1);

        if (oldName == _T("note.ini"))
        {
            continue;
        }


        newName.Format(_T("%d%s"),iCount,sExtension);

        newPath = sDirectory +_T("\\")+ newName;

        CFile::Rename(oldPath,newPath);

        WritePrivateProfileString(_T("note"), newName,oldName, sNoteDirectory); 
    }       
}

return TRUE;

}

写了两个方法,为了修改文件名和还原文件名。不过我遇到了一个问题,就是在还原文件名的时候当文件超过35个的时候,FindNextFile就找不到文件末尾了,导致我note.ini文件里面没有记录这个键值,得到了空值,然后在修改文件名的时候出现异常。
if (!_tcscmp(newName, _T("")))
{
return TRUE;
}我这样是为了不出现异常情况,但是我想知道,为什么文件超过那个数量的是FindNextFile会出现找不到文件结尾的情况。好愁

  • 写回答

1条回答

  • artisticnight 2020-12-03 18:04
    关注

    最后一个返回0

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?