小弟在各大论坛询问 未有点解难道这个问题很难?什么问题呢?这个问题是:“在网络传输文件时或者我们复制文件时那个进度条怎么弄?怎么实现他的百分比!”望各位能指教……

解决方案 »

  1.   

    你先把那个进度条的控件拖到你的application里,然后在合适的地方进行初始化
    (对话框是initi..不太记得了,view就是oncreate好了),然后你写个消息函数,classwizard就可以帮你,然后你在那个地方写上你的触发要求(就是让进度条动的要求)这样每次达到一个百分比就触发一次事件,让进度条改变,你可以参考vc技术内幕第4版
      

  2.   

    下面是我写的遍历目录的代码段,里面里面用到了一些自定义的类,不过幸好当时代码的注释写的比较全,大体的结构思路应当还是能看出来的。/////////////////////////////////////////////////////////////////
    //
    //  IterateFolder()
    //  遍历一个文件夹.
    //  参数:
    //    strPath:    文件夹路径
    //    ProgFunc:    遍历过程中,每遍历10个文件,这个函数被调用一次
    //            可用于界面更新等在计算忙时的交互处理
    //              函数原型:  void ProgFunc(int nFile, int nFolder)
    //              参数:    nFile   - 当前遍历文件数
    //                    nFolder - 当前遍历文件夹数void  CFolderStruct::IterateFolder(const CString& strPath, CFolderStruct::PROGFUNC ProgFunc)
    {
      int iTempIndex;
      int nTempNChild;  m_nFileNumber  = 0;
      m_nFolderNumber = 0;  CString strFind = strPath;
      strFind.TrimRight('\\');
      
      CFileFind ff;
      if(ff.FindFile(strFind))
      {
        ff.FindNextFile();
        CFolderInfo* pFolderI = new CFolderInfo(ff);
        IterateFolder(pFolderI, 0, iTempIndex, nTempNChild, ProgFunc);
      }
    }
    /////////////////////////////////////////////////////////////////
    //
    //  IterateFolder()
    //  遍历一个文件夹.
    //  参数:
    //    strPath:    文件夹路径
    //    rCurFolderI:  当前文件夹信息
    //    iParent:    父文件夹下标
    //    iCurrent:    返回当前文件夹下标
    //    nChild:      返回文件夹中的子文件夹总数
    //    ProgFunc:    同上
    //
    //  返回值:
    //    返回被遍历文件夹及其所有子文件夹中文件的总大小
    //
    //ULONG CFolderStruct::IterateFolder(  CFolderInfo* pCurFolderI,
                      int iParent,
                      int& iCurrent,
                      int& nChild,
                      CFolderStruct::PROGFUNC ProgFunc)
    {
      // 生成一个文件夹结构节点,并加入到列表中
      CFolderFileInfo* pFFI = new CFolderFileInfo;
      CFolderStructNode* pNode = new CFolderStructNode(pCurFolderI, pFFI, iParent);
      
      iCurrent = m_arrFolders.Add(pNode);  // 返回参数 - 这个目录在列表中的位置  ULONG ulFullSize  = 0;  // pCurFolderI的总大小(包括子目录中的文件)
      ULONG ulLocalSize = 0;  // pCurFolderI的大小(不包括子目录中的文件)
      int nFileNumber   = 0;  // pCurFolderI的文件数(包括子目录中的文件)
      int nFolderNumber = 0;  // pCurFolderI的文件夹数(包括子目录中的文件)  CString strFind = pCurFolderI->GetPath();  // 用于查找的字符串
      strFind.TrimRight('\\');
      strFind += "\\*.*";  CFileFind ff;
      BOOL bMore = ff.FindFile(strFind);  while(bMore)
      {
        bMore = ff.FindNextFile();  // 找到的是 . 或 ..
        if(ff.IsDots())
          continue;
        if(ff.IsDirectory())    // 找到的是一个文件夹(不是 . 或 .. )
        {
          CFolderInfo* pFolderI = new CFolderInfo(ff);  // 找到的文件夹的信息
          int iSubIndex;                  // pFolder的下标
          int nNestedChild;                // pFolder的子文件夹总数(包括子目录中的)      // 遍历这个文件夹,并得到它的下标及其子目录下标
          // 函数返回该文件夹的总大小
          ulFullSize += IterateFolder(pFolderI, iCurrent, iSubIndex, 
                                      nNestedChild, ProgFunc);      pNode->AddChild(iSubIndex);          // 添加子目录下标      m_nFolderNumber += 1;            // 从根目录算起的文件夹总数
          nFolderNumber += (1 + nNestedChild);    // 当前目录的文件夹总数
          nFileNumber += pFolderI->GetFileNumber();  // 当前目录的文件总数
        }
        else  // find a file
        {
          CFileInfo* pFileI = new CFileInfo(ff);  // 找到的文件的信息
          pFFI->Add(pFileI);            // 加入到文件信息列表中
          ulLocalSize += pFileI->GetSize();
          ++m_nFileNumber;  // 从根目录算起的文件总数
          ++nFileNumber;    // 当前目录的文件总数      if((m_nFileNumber%10) == 0 && ProgFunc)    // 其它处理
            ProgFunc(m_nFileNumber, m_nFolderNumber);
        }
      }  ulFullSize += ulLocalSize;  pCurFolderI->SetFileNumber(nFileNumber);
      pCurFolderI->SetFolderNumber(nFolderNumber);
      pCurFolderI->SetLocalSize(ulLocalSize);
      pCurFolderI->SetFullSize(ulFullSize);  nChild = nFolderNumber;    // 返回参数 - 这个目录中的文件夹总数  return ulFullSize;
    }
      

  3.   

    大体结构如下:ULONG CFolderStruct::IterateFolder(  CFolderInfo* pCurFolderI,
                      int iParent,
                      int& iCurrent,
                      int& nChild,
                      CFolderStruct::PROGFUNC ProgFunc)
    {
      // 统计变量声明...  // 生成当前目录路径
      CString strFind = pCurFolderI->GetPath();  // 用于查找的字符串
      strFind.TrimRight('\\');
      strFind += "\\*.*";  // 开始查找
      CFileFind ff;
      BOOL bMore = ff.FindFile(strFind);  while(bMore)
      {
        bMore = ff.FindNextFile();
        if(ff.IsDots())  // 找到的是 . 或 ..
          continue;    if(ff.IsDirectory())    // 找到的是一个文件夹(不是 . 或 .. )
        {
          // 递归调用IterateFolder()
          // 遍历这个文件夹,并得到它的下标及其子目录下标
          // 函数返回该文件夹的总大小
          ulFullSize += IterateFolder(new FolerInfo(ff),...);      // 进行目录信息统计...
        }
        else  // 找到一个文件
        {
          // 进行文件信息统计...
        }
      }  // 其它统计...  return ulFullSize;  // 返回目录下文件总大小
    }
      

  4.   

    大体结构如下:ULONG CFolderStruct::IterateFolder(  CFolderInfo* pCurFolderI,
                      int iParent,
                      int& iCurrent,
                      int& nChild,
                      CFolderStruct::PROGFUNC ProgFunc)
    {
      // 统计变量声明...  // 生成当前目录路径
      CString strFind = pCurFolderI->GetPath();  // 用于查找的字符串
      strFind.TrimRight('\\');
      strFind += "\\*.*";  // 开始查找
      CFileFind ff;
      BOOL bMore = ff.FindFile(strFind);  while(bMore)
      {
        bMore = ff.FindNextFile();
        if(ff.IsDots())  // 找到的是 . 或 ..
          continue;    if(ff.IsDirectory())    // 找到的是一个文件夹(不是 . 或 .. )
        {
          // 递归调用IterateFolder()
          // 遍历这个文件夹,并得到它的下标及其子目录下标
          // 函数返回该文件夹的总大小
          ulFullSize += IterateFolder(new FolerInfo(ff),...);      // 进行目录信息统计...
        }
        else  // 找到一个文件
        {
          // 进行文件信息统计...
        }
      }  // 其它统计...  return ulFullSize;  // 返回目录下文件总大小
    }
      

  5.   

    大体结构如下:ULONG CFolderStruct::IterateFolder(  CFolderInfo* pCurFolderI,
                      int iParent,
                      int& iCurrent,
                      int& nChild,
                      CFolderStruct::PROGFUNC ProgFunc)
    {
      // 统计变量声明...  // 生成当前目录路径
      CString strFind = pCurFolderI->GetPath();  // 用于查找的字符串
      strFind.TrimRight('\\');
      strFind += "\\*.*";  // 开始查找
      CFileFind ff;
      BOOL bMore = ff.FindFile(strFind);  while(bMore)
      {
        bMore = ff.FindNextFile();
        if(ff.IsDots())  // 找到的是 . 或 ..
          continue;    if(ff.IsDirectory())    // 找到的是一个文件夹(不是 . 或 .. )
        {
          // 递归调用IterateFolder()
          // 遍历这个文件夹,并得到它的下标及其子目录下标
          // 函数返回该文件夹的总大小
          ulFullSize += IterateFolder(new FolerInfo(ff),...);      // 进行目录信息统计...
        }
        else  // 找到一个文件
        {
          // 进行文件信息统计...
        }
      }  // 其它统计...  return ulFullSize;  // 返回目录下文件总大小
    }
      

  6.   

    如果是单个文件就简单得不用说了。
    多个文件就如 BalonFan(风飘影) 说的一样用递归统计文件总大小,然后用已传送字节数比上总大小就得到百分比了。