0

我在运行以下代码以递归复制 C 中的子文件夹时遇到问题。我在另一篇文章中看到了这一点,但代码似乎没有运行 if 语句来检查当前文件是否为目录。

void SearchDirectory(const char *name) {
DIR *dir = opendir(name);                
if(dir) {
    char Path[256], *EndPtr = Path;
    struct dirent *e;
    strcpy(Path, name);                  
    EndPtr += strlen(name);              
    while((e = readdir(dir)) != NULL) {  
        struct stat info;                
        strcpy(EndPtr, e->d_name);       
        if(!stat(Path, &info)) {         //code stops here and won't check if the current file is a directory or not..
            if(S_ISDIR(info.st_mode)) {  

                SearchDirectory(Path);   
            } else if(S_ISREG(info.st_mode) { 
                //Copy routine
            }
        }
    }
}

}

编辑

所以我在路径的末尾添加了一个斜杠,它似乎找到了目录,但在执行时因堆栈错误而崩溃。我认为它是无限循环的。新代码是:

void SearchDirectory(const char *name) {
DIR *dir = opendir(name);                
if(dir) {
    char Path[256], *EndPtr = Path;
    struct dirent *e;
    strcpy(Path, name);   
strcat(Path, slash);               
    EndPtr += (strlen(name)+1);              
    while((e = readdir(dir)) != NULL) {  
        struct stat info;                
        strcpy(EndPtr, e->d_name);       
        if(!stat(Path, &info)) {         //code stops here and won't check if the current file is a directory or not..
            if(S_ISDIR(info.st_mode)) {  

                SearchDirectory(Path);   
            } else if(S_ISREG(info.st_mode) { 
                //Copy routine
            }
        }
    }
}

}

4

2 回答 2

0

看起来它未能/在基本目录和附加部分之间插入目录分隔符 ( )。

假设name = "/home/foo/bar",EndPtr将指向'\0'最后,然后e->d_name被复制到那里,中间没有任何东西。这是错误的,它会创建一个混搭的文件名。

于 2013-09-10T11:12:51.737 回答
0

我自己无法测试您的代码,我没有安装正确的库。但是这里有一个使用 opendir et 的示例可能会有所帮助。人。

于 2013-09-10T15:06:47.387 回答