我写了一个读取目录的程序。它只能读取给定目录的第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~
我不知道为什么。 任何人都可以帮助我吗?
答案 0 :(得分:1)
文件名末尾的波浪号表示这是一个备份文件。我的假设是问题不在您的代码中,而是在您用来编辑文件的编辑器中。编辑器(例如gedit
)会留下一个备份文件,最后用~
符号表示。您应该尝试关闭编辑器并再次运行程序。
答案 1 :(得分:0)
您应该首先使用以下内容将newp [1000]初始化为零:
char newp[1000] = {0};
循环中存在问题,因为您对路径和文件名使用newp,这是您必须处理的两个不同的事情。实际上,在打开./user1然后./user2时会遇到问题,因为你用./user1/a.txt~覆盖了newp并且从不清除它。
顺便说一句,〜affair可能只是你启动程序的目录中的备份文件。根据您正在使用的操作系统,readdir可能会在第一次调用时返回隐藏文件,这很可能是因为您的文件以“a”开头。
找到一种在while循环中创建正确路径的方法,并在当前目录中执行ls -a。