阅读目录

时间:2014-12-21 17:01:01

标签: c linux directory

我写了一个读取目录的程序。它只能读取给定目录的第2级。

void
readDir (char *pth)
{
  char path[1000];
  strcpy (path, pth);
  DIR *dp;
  DIR *dp2;
  struct dirent *files;
  struct dirent *files2;
  if ((dp = opendir (path)) == NULL)
    perror ("dir\n");

  char newp[1000];

  struct stat buf;

  while ((files = readdir (dp)) != NULL)
    {
      if ((strcmp (files->d_name, ".") && strcmp (files->d_name, "..")))
        {
          strcpy (newp, path);
          strcat (newp, "/");
          strcat (newp, files->d_name);
          printf ("%s\n", newp);
          if ((dp2 = opendir (newp)) == NULL)
            perror ("dir\n");
          while ((files2 = readdir (dp2)) != NULL)
            {
              printf ("%s\n", files2->d_name);
              if ((strcmp (files2->d_name, ".")
                   && strcmp (files2->d_name, "..")))
                {
                  strcat (newp, "/");
                  strcat (newp, files2->d_name);
                  //printf("%s\n",newp);
                  CheckOutput (newp);
                }
            }
        }
    }
}

directoreis安排示例:(在每个用户目录中都有一个文本文件。)

Head -> user1 -> a.txt
     -> user2 -> b.txt
     -> user3 -> c.txt

它运行良好一次,但后来发生了一些奇怪的事情:我复制了粘贴的txt文件,并删除了它并打印了一些奇怪的目录,如:

/home/Desktop/Head/user/a.txt~
/home/Desktop/Head/user/a.txt~/b.txt~

我不知道为什么。 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

文件名末尾的波浪号表示这是一个备份文件。我的假设是问题不在您的代码中,而是在您用来编辑文件的编辑器中。编辑器(例如gedit)会留下一个备份文件,最后用~符号表示。您应该尝试关闭编辑器并再次运行程序。

答案 1 :(得分:0)

您应该首先使用以下内容将newp [1000]初始化为零:

char newp[1000] = {0};

循环中存在问题,因为您对路径和文件名使用newp,这是您必须处理的两个不同的事情。实际上,在打开./user1然后./user2时会遇到问题,因为你用./user1/a.txt~覆盖了newp并且从不清除它。

顺便说一句,〜affair可能只是你启动程序的目录中的备份文件。根据您正在使用的操作系统,readdir可能会在第一次调用时返回隐藏文件,这很可能是因为您的文件以“a”开头。

找到一种在while循环中创建正确路径的方法,并在当前目录中执行ls -a。