加拿大家园论坛

VC++编程问题

原文链接:https://forum.iask.ca/threads/736/

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

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

apple3800 : 2004-08-24#2
不用 MFC,用 FindFirstFile 和 FindNextFile 就行了。具体请查阅 MSDN。

limingliming : 2004-08-24#3
谢谢!
是一个一个地遍历文件吗?没有一个函数可以直接返回一个目录下所有文件数组指针的函数吗?

admin : 2004-08-24#4
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#5
if ( DataFile.Open( CString(iFileName), CFile::modeRead , &fe) )
高啊!!!!
可惜我在银行的IT部门也混了一年。啊!!!!



:wdb17: :wdb17: :wdb17: :wdb17: :wdb17:

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

可以用以下代码:

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


代替
CString(iFileName)
转化

admin : 2004-08-25#7
另外笨笨注意到三天内得要求,修正提供这个版本:

代码:
#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-25#8
都用MFC了

MFC挺好用的,特别是CString