gpt4 book ai didi

c - readdir 忽略以点开头的非空存储库

转载 作者:行者123 更新时间:2023-11-30 18:42:26 26 4
gpt4 key购买 nike

我正在编写一个点文件存储库管理器,但删除存储库的命令不起作用。它转到存储库文件夹,然后它必须列出所有文件和目录,以便我能够删除它们。问题是,它列出了我需要删除的每个文件或目录,但它排除了非空的 .git。我对其他存储库进行了进一步的测试,我的结论是,每个名称以点开头的非空目录都会被忽略,而“正常”点文件则可以。这是有问题的代码,我将快速描述它。

使用存储库名称调用 rm_dotfiles_repository,repo_dir(repo) 获取存储库,然后启动 readdir 循环。我需要递归删除文件夹,这就是我在文件夹和普通旧文件之间进行过滤的原因。请注意,我不会排除文件夹 ...,但我很快就会添加它。

#define _XOPEN_SOURCE 500
#include "repository.h"
#include "helpers.h"
#include "nftwcallbacks.h"

#include <unistd.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <error.h>
void rm_dotfiles_repository(char* repo)
{
repo_dir(repo);
/* Remove the repository's files recursively
* TODO: Remove the symbolic links in ~ before removing the repo
* We remove the repository, target by target */
DIR* dir = NULL;
struct dirent* file = NULL;
struct stat stat_data;
dir = opendir(".");
if (dir == NULL)
{
perror("Error:");
exit(EXIT_FAILURE);
}
file = readdir(dir);
while ((file = readdir(dir)) != NULL)
{
if (strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0)
{
/* TODO: why isn't .git listed, even if .gitmodules is listed ? After tests, it seems that .something repositories which are non-empty
* aren't listed*/
if(stat(file->d_name, &stat_data))
{
perror("Error");
exit(EXIT_FAILURE);
}
if (S_ISDIR(stat_data.st_mode))
{
remove_target(repo, file->d_name);
}
else
{
printf("Remove file %s\n", file->d_name);
}
}
}
if (closedir(dir))
{
perror("Error:");
exit(EXIT_FAILURE);
}
}

void install_target(char* repo, char* target)
{
repo_dir(repo);
if (nftw(target, install, 4, 0))
{
exit(EXIT_FAILURE);
}
}

void remove_target(char* repo, char* target)
{
printf("Remove target %s from repo %s\n", target, repo);
}

你能帮我找出问题的原因吗?提前致谢

编辑:正如 Mats Petersson 所问,here是完整的代码,我给出的代码片段是repository.c

最佳答案

您的代码“跳过”目录中的第一个条目:

file = readdir(dir);
while ((file = readdir(dir)) != NULL)

删除

file = readdir(dir);

一切都会正常进行。

关于c - readdir 忽略以点开头的非空存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com