读书人

C++怎么获得文件目录

发布时间: 2012-05-20 16:03:12 作者: rapoo

C++如何获得文件目录?
就是像windows资源管理器树形目录那样,要怎么实现类似的功能?


[解决办法]
这个不是用C++语言什么的能解决的,这个要看操作系统的。一般操作系统都能够提供关于文件系统的API的。下面是window的一个例子。

C/C++ code
find(char * lpPath){  char szFind[MAX_PATH];  WIN32_FIND_DATA FindFileData;  strcpy(szFind,lpPath);  strcat(szFind,"*.*");  HANDLE hFind=::FindFirstFile(szFind,&FindFileData);  if(INVALID_HANDLE_VALUE == hFind)  return;  while(TRUE)  {    if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)    {      if(FindFileData.cFileName[0]!='.')      {        strcpy(szFile,lpPath);        strcat(szFile,"");        strcat(szFile,FindFileData.cFileName);        find(szFile);      }    }    else    {      cout << FindFileData.cFileName;    }    if(!FindNextFile(hFind,&FindFileData))  break;  }  FindClose(hFind);}
[解决办法]
操作文件系统时就要和具体的操作系统打交道了。不同的系统是不一样的。
linux平台上可以使用opendir等函数
C/C++ code
#include <unistd.h>#include <stdio.h>#include <dirent.h>#include <string.h>#include <sys/stat.h>/*  We start with the appropriate headers and then a function, printdir,    which prints out the current directory.    It will recurse for subdirectories, using the depth parameter is used for indentation.  */void printdir(char *dir, int depth){    DIR *dp;    struct dirent *entry;    struct stat statbuf;    if((dp = opendir(dir)) == NULL) {        fprintf(stderr,"cannot open directory: %s\n", dir);        return;    }    chdir(dir);    while((entry = readdir(dp)) != NULL) {        lstat(entry->d_name,&statbuf);        if(S_ISDIR(statbuf.st_mode)) {            /* Found a directory, but ignore . and .. */            if(strcmp(".",entry->d_name) == 0 ||                 strcmp("..",entry->d_name) == 0)                continue;            printf("%*s%s/\n",depth,"",entry->d_name);            /* Recurse at a new indent level */            printdir(entry->d_name,depth+4);        }        else printf("%*s%s\n",depth,"",entry->d_name);    }    chdir("..");    closedir(dp);}/*  Now we move onto the main function.  */int main(int argc, char* argv[]){    char *topdir, pwd[2]=".";    if (argc != 2)        topdir=pwd;    else        topdir=argv[1];    printf("Directory scan of %s:\n",topdir);    printdir(topdir,0);    printf("------done-------\n");    return (0);} 

读书人网 >C++

热点推荐