当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: rar registration data paradox single pc usage license uid=c17cd4725453c7b4f117 6412212250f1173eea715a04d173bace60bd845e63cc945c25a67e bc7a3f76cf6082b7eb586035c6ab9048e2c5c62f0238f183d28519 aa87488......
 ·大家帮忙看看这个c程序。    »显示摘要«
    摘要: #include <stdio.h> main (){ int a,b; scanf ("%d,%d",&a,&b); printf ("%d",max()); } max (x,y){ if (x>y) return x; else return y; } ......


关于遍历目录的问题

我在一本书上看见了如下遍历目录的方法,代码如下:  
   
  HANDLE   hFind;  
  WIN32_FIND_DATA   dataFind;  
  BOOL   bMoreFiles=TRUE;  
  CString   strFile;  
   
  hFind=FindFirstFile(somedirectory+"\\*.*",&dataFind);  
  //somedirectory代表某个目录是CString类型;  
   
  while(hFind!=INVALID_HANDLE_VALUE&&bMoreFiles==TRUE){  
  if(dataFind.dwFileAttributes==FILE_ATTRIBUTE_ARCHIVE){  
  strFile=dataFind.cFileName; //如果是文件  
  ……  
  }else   if(dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY){  
  strFile=dataFind.cFileName; //如果是目录  
  ……  
  }  
  bMoreFiles=FindNextFile(hFind,&dataFind);  
  }  
  FindClose(hFind);  
   
  可是在使用中发现判断目录还是文件的语句有问题。  
  一般一个目录或文件有三个属性:只读、隐藏、存档。  
   
  以目录判断为例:若这三个属性都不选中则用下面的  
  语句就可以判断出来:  
   
  dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY  
   
  若选中了只读属性,则上面的语句就不行了必须改为:  
  dataFind.dwFileAttributes==  
          FILE_ATTRIBUTE_DIRECTORY+FILE_ATTRIBUTE_READONLY  
   
  同理,若选中了隐藏就得改为:  
  dataFind.dwFileAttributes==  
          FILE_ATTRIBUTE_DIRECTORY+FILE_ATTRIBUTE_HIDDEN  
   
  这样问题就来了,若你只想把文件和目录分开而不关心他们  
  的属性那么判断语句将会变得非常复杂。  
   
  dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY  
  ||dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY+  
  FILE_ATTRIBUTE_READONLY  
  ||dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY+  
  FILE_ATTRIBUTE_ARCHIVE  
  ||dataFind.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY+  
  FILE_ATTRIBUTE_HIDDEN  
   
  这还只是一小部分,因为有的目录会同时选中两个或三个属性,  
  若想判断所有情况就会更复杂。  
   
  而且例程中的dataFind.dwFileAttributes==FILE_ATTRIBUTE_ARCHIVE  
  语句根本不能用来判断是否是文件,它只是判断是否含有存档属性。  
   
  那么有没有朋友知道简单的遍历目录的方法,或简单的判断方法?

NO.1   作者: duiduiblues

CFileFind   finder;  
  CString   strFinder=   _T(".\\plugin\\*.npp");  
   
  BOOL   bFinished   =   finder.FindFile(strFinder);  
   
  while   (bFinished)  
  {  
                    bFinished   =   finder.FindNextFile();  
   
  if   (finder.IsDots())  
  continue;  
   
  CString   strFileName   =   finder.GetFilePath();  
   
   
                      //do   something   else......  
   
  }  
   
  finder.Close();  
 

NO.2   作者: chzy00

if((dataFind.dwFileAttributes   &   FILE_ATTRIBUTE_DIRECTORY)   ==   FILE_ATTRIBUTE_DIRECTORY)  
  {  
          //是目录  
  }

NO.3   作者: certbuggy

用递归算法就行,其实目录也是文件,用*代表目录下的所有文件和目录,*.代表目录下的所有子目录,*.*代表目录下的所有文件


    摘要: 我想望数据库中插入一各null的值,怎么办 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE