gpt4 book ai didi

c - "mkdir()"不工作

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:28 24 4
gpt4 key购买 nike

您好,我正在尝试创建一个递归复制函数来模拟 Unix 中的 CP 程序。所以基本上,如果我使用 -r 选项运行程序,它将复制一个包含所有子目录的文件夹。我正在使用以下功能。

void copyDirectory(char *destDir, char *dirName)
{
printf("copyDirectory run \n");

int charCnt;
int srcFd;
int dstFd;
char* sourcePath;
char* destPath;

DIR *dir = opendir(dirName);
if(dir == NULL){
return;
}

char Path[256], *EndPtr = Path;

struct dirent *e;
strcpy(Path, dirName);

EndPtr += (strlen(dirName)+1);
while((e = readdir(dir)) != NULL){
sourcePath = malloc(strlen(Path)+1+strlen(e->d_name));
destPath = malloc(strlen(destDir)+1+strlen(Path));
strcpy(destPath, destDir);
strcat(destPath, slash);
strcat(destPath, Path);

if (0 != access(destPath, F_OK)) {
mkdir(destPath,0777);
printf("mkdir %s \n", destPath);
}

strcpy(sourcePath, Path);
strcat(sourcePath, slash);
strcat(sourcePath, e->d_name);

printf("copyDirectory destPath = %s \n", destPath);
printf("copyDirectory sourcePath = %s \n", sourcePath);

if(strcmp(e->d_name, dott) == 0){
continue;
}
if(strcmp(e->d_name, dot) == 0){
continue;
}


if(whatType(sourcePath) == 1){
copyDirectory(destDir, sourcePath);
}
else{
/* copyFile(destPath, sourcePath);*/
}

free(sourcePath);
free(destPath);
}
}

如果我使用以下命令行运行程序,这似乎工作正常。

Mycopy Sourcefolder/ DestinationFoler/

但是当我用这个命令行运行它时,我程序中的 mkdir 函数停止工作。

Mycopy Sourcefolder/Subfolder/ DestinationFoler/

奇怪的是我在 mkdir 调用中放置了一个 printf 标记以查看 destPath 是什么,并且格式看起来与我调用程序时不使用 subfoler 没有什么不同。这是怎么回事?

最佳答案

mkdir这样测试函数和系统调用的返回值总是好的做法。这会在您的代码中找到我在下面解释的(可能的)错误。

if (0 != mkdir(destPath,0777)) {
printf("When executing: mkdir(\"%s\")\n", destPath);
perror("mkdir");
exit(1);
}

有了这个你会看到:

When executing: mkdir("trg/src")
mkdir: No such file or directory

您的代码似乎运行正常。为了测试它,我必须添加一些 #include#define 并实现函数 whatType,所以我所做的一切我写作的前提是我们对这些有相似的定义。

您的代码与 Linux 中的 cp -r 有很大区别,这可以解释您遇到的问题。假设您在 src/ 下有一个现有目录结构,并且没有目录 名为 trg/。如果你执行:

cp -r src trg

这将导致完整的目录结构 src/ 被复制到 trg/ 下,也就是说,如果你有一个文件 src/f,这将被复制到 trg/f

另一方面,如果最初有一个名为trg的目录,那么完整的目录结构src/将被复制到trg/src/,即文件src/f将被复制到trg/src/f

使用您的代码,行为始终是第二个。您的代码假定目标根目录存在:它尝试创建的第一个目录始终是 trg/src。如果 trg/ 尚不存在,则此操作失败。

关于c - "mkdir()"不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812120/

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