驿路枫情-加拿大移民论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2898|回复: 7

[其它] VC++编程问题

[复制链接]
发表于 2004-8-25 09:50:19 | 显示全部楼层 |阅读模式
各位朋友本着友谊互爱的精神,这里提一个于移民无关的问题。请有经验的朋友指点一下。

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

使用道具 举报

发表于 2004-8-25 10:00:00 | 显示全部楼层
不用 MFC,用 FindFirstFile 和 FindNextFile 就行了。具体请查阅 MSDN。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-25 10:20:44 | 显示全部楼层
谢谢!
是一个一个地遍历文件吗?没有一个函数可以直接返回一个目录下所有文件数组指针的函数吗?
回复 支持 反对

使用道具 举报

发表于 2004-8-25 10:47:53 | 显示全部楼层
liming,笨笨不写MFC程序已经很多年了(听起来怎么这样耳熟?    )

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


  1. #include "stdafx.h"

  2. void test()
  3. {
  4.      // Get File Name List
  5.     CStringList  listName;
  6.    CFileFind finder;
  7.    BOOL bWorking = finder.FindFile("*.*"); // current directory?
  8.    while (bWorking)
  9.    {
  10.       bWorking = finder.FindNextFile();
  11.       listName.AddTail(finder.GetFileName());
  12.    }

  13.    //Get Min and Max File Number
  14.         CString szFileName;
  15.         int minFilename , maxFilename , tempFilename ;
  16.         POSITION pos = listName.GetHeadPosition();
  17.         if( pos != NULL )
  18.         {
  19.                 szFileName =  listName.GetNext( pos );
  20.                 tempFilename= atoi(szFileName );
  21.                 minFilename = tempFilename;
  22.                 maxFilename = tempFilename;
  23.         }

  24.         while ( pos != NULL )
  25.         {
  26.                 szFileName =  listName.GetNext( pos );
  27.                 tempFilename= atoi(szFileName );
  28.                 if( tempFilename > maxFilename )
  29.                         maxFilename  = tempFilename ;
  30.                
  31.                 if( tempFilename < minFilename )
  32.                         minFilename = tempFilename ;
  33.                
  34.         }
  35.        
  36.         // get what is missing
  37.         for( int iFileName = minFilename; iFileName < maxFilename  ; iFileName++ )
  38.         {
  39.                 CFile DataFile;
  40.                 CFileException fe;
  41.                
  42.                 if ( DataFile.Open( CString(iFileName), CFile::modeRead , &fe) )
  43.                 {
  44.                  // i am here
  45.                 }
  46.         }
  47. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-25 14:45:46 | 显示全部楼层
if ( DataFile.Open( CString(iFileName), CFile::modeRead , &fe) )
高啊!!!!
可惜我在银行的IT部门也混了一年。啊!!!!



        
回复 支持 反对

使用道具 举报

发表于 2004-8-25 17:25:57 | 显示全部楼层
上面有行代码写错了,笨笨好长时间没写了. 没去检查 CString 是否支持一个整数构造函数.

可以用以下代码:

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


代替
CString(iFileName)
转化
回复 支持 反对

使用道具 举报

发表于 2004-8-25 17:41:39 | 显示全部楼层
另外笨笨注意到三天内得要求,修正提供这个版本:


  1. #include "stdafx.h"

  2. void test()
  3. {
  4.    // Get File Name List
  5.    CStringList  listName;
  6.    CFileFind finder;
  7.    BOOL bWorking = finder.FindFile("*.*"); // current directory?
  8.    while (bWorking)
  9.    {
  10.       bWorking = finder.FindNextFile();

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

  15.           CTimeSpan TimeSpan;
  16.           TimeSpan = TimeNow - tempTime;       

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

  20.   //Get Min and Max File Number
  21.   
  22.         CString szFileName;
  23.         int minFilename , maxFilename , tempFilename ;
  24.         POSITION pos = listName.GetHeadPosition();
  25.         if( pos != NULL )
  26.         {
  27.                 szFileName =  listName.GetNext( pos );
  28.                 tempFilename= atoi(szFileName );
  29.                 minFilename = tempFilename;
  30.                 maxFilename = tempFilename;
  31.         }

  32.         while ( pos != NULL )
  33.         {
  34.                 szFileName =  listName.GetNext( pos );
  35.                 tempFilename= atoi(szFileName );
  36.                 if( tempFilename > maxFilename )
  37.                         maxFilename  = tempFilename ;
  38.                
  39.                 if( tempFilename < minFilename )
  40.                         minFilename = tempFilename ;       
  41.         }
  42.        
  43.         // get what is missing
  44.         for( int iFileName = minFilename; iFileName < maxFilename  ; iFileName++ )
  45.         {
  46.                 CFile DataFile;
  47.                 CFileException fe;
  48.        
  49.                 CString strValue;
  50.                 strValue.Format( "%d", iFileName);

  51.                 if ( !DataFile.Open( strValue, CFile::modeRead , &fe) )
  52.                 {
  53.                  // i am here
  54.                 }
  55.         }
  56. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2004-8-26 08:48:12 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|驿路枫情加拿大华人网

GMT+8, 2025-1-4 04:19 , Processed in 0.156293 second(s), 6 queries , Gzip On, File On.

快速回复 返回顶部 返回列表