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