加拿大家园网


加拿大家园论坛 > 临行准备 > VC++编程问题

VC++编程问题
limingliming 2004-08-25 10:50

各位朋友本着友谊互爱的精神,这里提一个于移民无关的问题。请有经验的朋友指点一下。

程序功能要求:
要测试一个目录中生成日期在3天内的文件的文件名称是否连续(文件以数字字符组成,正常情况下应该连续),如果出现号码跳跃则提示。
.
问题:
如何取出一个目录下的所有文件到数组(用哪个MFC?),有没有对数组自动排序的函数?
请有经验的朋友支持!有电话更好

apple3800 2004-08-25 11:00

不用 MFC,用 FindFirstFile 和 FindNextFile 就行了。具体请查阅 MSDN。

limingliming 2004-08-25 11:20

谢谢!
是一个一个地遍历文件吗?没有一个函数可以直接返回一个目录下所有文件数组指针的函数吗?

admin 2004-08-25 11:47

liming,笨笨不写MFC程序已经很多年了(听起来怎么这样耳熟? :wdb4: :wdb4: )

下面的代码没有测试,供参考:

代码:

#include "stdafx.h"

void test()
{
    // Get File Name List
    CStringList  listName;
  CFileFind finder;
  BOOL bWorking = finder.FindFile("*.*"); // current directory?
  while (bWorking)
  {
      bWorking = finder.FindNextFile();
      listName.AddTail(finder.GetFileName());
  }

  //Get Min and Max File Number
        CString szFileName;
        int minFilename , maxFilename , tempFilename ;
        POSITION pos = listName.GetHeadPosition();
        if( pos != NULL )
        {
                szFileName =  listName.GetNext( pos );
                tempFilename= atoi(szFileName );
                minFilename = tempFilename;
                maxFilename = tempFilename;
        }

        while ( pos != NULL )
        {
                szFileName =  listName.GetNext( pos );
                tempFilename= atoi(szFileName );
                if( tempFilename > maxFilename )
                        maxFilename  = tempFilename ;
               
                if( tempFilename < minFilename )
                        minFilename = tempFilename ;
               
        }
       
        // get what is missing
        for( int iFileName = minFilename; iFileName < maxFilename  ; iFileName++ )
        {
                CFile DataFile;
                CFileException fe;
               
                if ( DataFile.Open( CString(iFileName), CFile::modeRead , &fe) )
                {
                // i am here
                }
        }
}


limingliming 2004-08-25 15:45

if ( DataFile.Open( CString(iFileName), CFile::modeRead , &fe) )
高啊!!!!
可惜我在银行的IT部门也混了一年。啊!!!!



。 :wdb17: :wdb17: :wdb17: :wdb17: :wdb17:

admin 2004-08-25 18:25

上面有行代码写错了,笨笨好长时间没写了. 没去检查 CString 是否支持一个整数构造函数.

可以用以下代码:

CString strValue
strValue.Format( "%d", iFileName);


代替
CString(iFileName)
转化

admin 2004-08-25 18:41

另外笨笨注意到三天内得要求,修正提供这个版本:

代码:

#include "stdafx.h"

void test()
{
  // Get File Name List
  CStringList  listName;
  CFileFind finder;
  BOOL bWorking = finder.FindFile("*.*"); // current directory?
  while (bWorking)
  {
      bWorking = finder.FindNextFile();

                // in three days
          CTime tempTime;
          CTime TimeNow = CTime::GetCurrentTime();
          finder.GetLastWriteTime(tempTime);

          CTimeSpan TimeSpan;
          TimeSpan = TimeNow - tempTime;       

          if( TimeSpan.GetTotalMinutes() < 3*24*60 )
                listName.AddTail(finder.GetFileName());
  }

  //Get Min and Max File Number
 
        CString szFileName;
        int minFilename , maxFilename , tempFilename ;
        POSITION pos = listName.GetHeadPosition();
        if( pos != NULL )
        {
                szFileName =  listName.GetNext( pos );
                tempFilename= atoi(szFileName );
                minFilename = tempFilename;
                maxFilename = tempFilename;
        }

        while ( pos != NULL )
        {
                szFileName =  listName.GetNext( pos );
                tempFilename= atoi(szFileName );
                if( tempFilename > maxFilename )
                        maxFilename  = tempFilename ;
               
                if( tempFilename < minFilename )
                        minFilename = tempFilename ;       
        }
       
        // get what is missing
        for( int iFileName = minFilename; iFileName < maxFilename  ; iFileName++ )
        {
                CFile DataFile;
                CFileException fe;
       
                CString strValue;
                strValue.Format( "%d", iFileName);

                if ( !DataFile.Open( strValue, CFile::modeRead , &fe) )
                {
                // i am here
                }
        }
}


flybabycat 2004-08-26 09:48

MFC挺好用的,特别是CString