如何获取某一指定目录下的所有文件的文件名(用C或C++)

时间:2022-09-22 14:33:31
我想把某个目录下的所有文件依次打开,读取其中的内容,
是否必须先获得所有文件的文件名,如何实现?有什么现成的函数吗?
如果该目录下还有子目录,对上面的问题会造成什么影响?
谢谢。

3 个解决方案

#1


有。TC中findfirst, findnext。

#2


有。TC中findfirst, findnext。
    VC中FindFirstFile, FindNextFile。

#include "windows.h"

int
main(int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;

  printf ("Target file is %s.\n", argv[1]);

  hFind = FindFirstFile(argv[1], &FindFileData);

  if (hFind == INVALID_HANDLE_VALUE) {
    printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
  } else {
    printf ("The first file found is %s\n", FindFileData.cFileName);
    FindClose(hFind);
  }

  return (0);
}

#3


摘自《The GNU C Library Reference Manual Volume 1》:

第14章 文件系统接口

14.2.4 列出目录的简单程序

这里的例子打印出当前工作目录下所有的文件:

#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int main(void)
{
  DIR* dp;
  struct dirent* ep;

  dp = opendir("./");
  if (dp != NULL)
   {
    while (ep = readdir(dp))
      puts(ep->d_name);
    (void) closedir(dp);
   }
  else
    puts("Couldn't open the directory.");

 return 0;
}


其中,

1)DIR  目录流(directory stream)类型;

2)struct dirent 包含以下内容: 
    char d_name[] 文件名
    ino_t d_fileno 文件序列号
    unsigned char d_namelen 文件名长度
    unsigned char d_type 文件类型 
        文件类型可以是:DT_UNKNOWN 不明类型
                       DT_REG 普通文件
                       DT_DIR 目录(to marmoset:这是你需要知道的)
                       等;
                       
    等;

3)DIR* opendir(const char* dirname) 
   打开并返回一个名为dirname的用于读取操作的目录流;

4)struct dirent* readdir(DIR* dirstream) 
   从目录中读取下一条入口(entry),返回一个包含文件信息的dirent结构;

5)int closedir(DIR* dirstream)
   关闭名为dirstream的目录流;

6)puts()函数就不用我介绍了吧。


这是Linux/Unix下的情况;相信dos,windows下会更方便,无奈我没有这方面的资料(你可以自己多看看VC、BC庞大的帮助系统,应该是可以找到相应函数和结构的。这里我给出的信息,你可以当作参考,大概知道应该找些什么方面的帮助.)。

希望对你有帮助。

#1


有。TC中findfirst, findnext。

#2


有。TC中findfirst, findnext。
    VC中FindFirstFile, FindNextFile。

#include "windows.h"

int
main(int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;

  printf ("Target file is %s.\n", argv[1]);

  hFind = FindFirstFile(argv[1], &FindFileData);

  if (hFind == INVALID_HANDLE_VALUE) {
    printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
  } else {
    printf ("The first file found is %s\n", FindFileData.cFileName);
    FindClose(hFind);
  }

  return (0);
}

#3


摘自《The GNU C Library Reference Manual Volume 1》:

第14章 文件系统接口

14.2.4 列出目录的简单程序

这里的例子打印出当前工作目录下所有的文件:

#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int main(void)
{
  DIR* dp;
  struct dirent* ep;

  dp = opendir("./");
  if (dp != NULL)
   {
    while (ep = readdir(dp))
      puts(ep->d_name);
    (void) closedir(dp);
   }
  else
    puts("Couldn't open the directory.");

 return 0;
}


其中,

1)DIR  目录流(directory stream)类型;

2)struct dirent 包含以下内容: 
    char d_name[] 文件名
    ino_t d_fileno 文件序列号
    unsigned char d_namelen 文件名长度
    unsigned char d_type 文件类型 
        文件类型可以是:DT_UNKNOWN 不明类型
                       DT_REG 普通文件
                       DT_DIR 目录(to marmoset:这是你需要知道的)
                       等;
                       
    等;

3)DIR* opendir(const char* dirname) 
   打开并返回一个名为dirname的用于读取操作的目录流;

4)struct dirent* readdir(DIR* dirstream) 
   从目录中读取下一条入口(entry),返回一个包含文件信息的dirent结构;

5)int closedir(DIR* dirstream)
   关闭名为dirstream的目录流;

6)puts()函数就不用我介绍了吧。


这是Linux/Unix下的情况;相信dos,windows下会更方便,无奈我没有这方面的资料(你可以自己多看看VC、BC庞大的帮助系统,应该是可以找到相应函数和结构的。这里我给出的信息,你可以当作参考,大概知道应该找些什么方面的帮助.)。

希望对你有帮助。