Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让dirent忽略当前目录? 我在UBUTUU 16.04 Linux BR>上做C++程序,是从shell读取目录路径和组宽度。然后,它应该在目录中导航并跟踪文件,如果它找到了一个目录,那么就进入目录并跟踪这些文件。并在末尾打印直方图_C++_File_Ignore - Fatal编程技术网

如何让dirent忽略当前目录? 我在UBUTUU 16.04 Linux BR>上做C++程序,是从shell读取目录路径和组宽度。然后,它应该在目录中导航并跟踪文件,如果它找到了一个目录,那么就进入目录并跟踪这些文件。并在末尾打印直方图

如何让dirent忽略当前目录? 我在UBUTUU 16.04 Linux BR>上做C++程序,是从shell读取目录路径和组宽度。然后,它应该在目录中导航并跟踪文件,如果它找到了一个目录,那么就进入目录并跟踪这些文件。并在末尾打印直方图,c++,file,ignore,C++,File,Ignore,我有一个奇怪的bug,由于我处理子文件夹的递归函数,它导致了一个看似无限的循环。如果我运行比较((J->d_type)==DT_DIR)其中struct dirent*J。读取所有文件后,它总是返回true,因为它会反复调用自己 有什么办法可以防止吗?我觉得我只需要一张额外的支票,但我不知道该检查什么。我通过结构链表实现了它。结构的代码如下: struct node{ node* next, *prev; int count, name, min, max; node()

我有一个奇怪的bug,由于我处理子文件夹的递归函数,它导致了一个看似无限的循环。如果我运行比较
((J->d_type)==DT_DIR)
其中struct dirent*J。读取所有文件后,它总是返回true,因为它会反复调用自己

有什么办法可以防止吗?我觉得我只需要一张额外的支票,但我不知道该检查什么。我通过结构链表实现了它。结构的代码如下:

struct node{
    node* next, *prev;
    int count, name, min, max;
    node(){
        prev = NULL;
        next = NULL;
        count = 0;
        name = nodecount;
        min = 0;
        max = 0;
    }
}
)

源代码如下:

int main(int argc,char *argv[]){
    // Ensures that a valid directory is provided by the cmd line argument
    if (argc != 3){
        fprintf (stderr, "%d is not the valid directory name \n", argc);
        return 1;
    }
    DIR * cwd; // current working directory pointer
    struct dirent *J; // pointer to dirent struct
    int binWidth; // variable for the width of the grouping in the histogram
    binWidth = atoi(argv[2]);
    node *first = new node;
    nodecount++;
    first->max = binWidth - 1;
    node * current;
    current = first;
    bool isadirectory = false;
    if((cwd = opendir(argv[1]))== NULL){
        perror("Can't open directory");
        return 2;
    }

    while ((J = readdir(cwd)) != NULL){
        isadirectory = false;
        if((J -> d_type) == DT_UNKNOWN ){
            struct stat stbuf;
            stat(J->d_name, &stbuf);
            isadirectory = S_ISDIR(stbuf.st_mode);
        }
        else if((J -> d_type) == DT_DIR ){
            isadirectory = true;
        }
        else{
            if((J-> d_reclen <= current->max)&&(J->d_reclen >=current->min)){
                    current->count = current->count+1;
            }
            else if(J->d_reclen < current->min){
                node*temp = current->prev;
                while(temp->prev != NULL){
                    if((J-> d_reclen <= current->max)&&(J->d_reclen >=current->min)){
                            current->count = current->count+1;
                            break;
                    }
                    else if(J->d_reclen < current->min){
                        temp = current->prev;
                }
            }
        }
            else{
                nodecount++;
                current -> next = nextNode(current);
                current = current -> next;
            }
        }
        if(isadirectory){
            traverseNewDirectory(current,J->d_name);
        }
    }
    while ( ( closedir (cwd) == -1) && ( errno == EINTR) );
    printHistogram(first);
    return 0;
}
intmain(intargc,char*argv[]){
//确保cmd行参数提供有效的目录
如果(argc!=3){
fprintf(stderr,“%d不是有效的目录名\n”,argc);
返回1;
}
DIR*cwd;//当前工作目录指针
struct dirent*J;//指向dirent struct的指针
int binWidth;//直方图中分组宽度的变量
binWidth=atoi(argv[2]);
node*first=新节点;
nodecount++;
第一个->最大值=binWidth-1;
节点*电流;
电流=第一;
bool-isadirectory=false;
if((cwd=opendir(argv[1]))==NULL){
perror(“无法打开目录”);
返回2;
}
while((J=readdir(cwd))!=NULL){
isadirectory=false;
如果((J->d_类型)=DT_未知){
结构统计stbuf;
统计(J->d_名称和stbuf);
isadirectory=S_ISDIR(stbuf.st_模式);
}
如果((J->d_类型)==DT_DIR){
isadirectory=true;
}
否则{
如果((J->d\U重合闸最大值)和&(J->d\U重合闸>=当前->最小值)){
当前->计数=当前->计数+1;
}
否则如果(J->d_recen<当前->最小值){
节点*temp=current->prev;
while(临时->上一个!=NULL){
如果((J->d\U重合闸最大值)和&(J->d\U重合闸>=当前->最小值)){
当前->计数=当前->计数+1;
打破
}
否则如果(J->d_recen<当前->最小值){
温度=当前->上一个;
}
}
}
否则{
nodecount++;
当前->下一个=下一个节点(当前);
当前=当前->下一步;
}
}
如果(ISA目录){
traverseNewDirectory(当前,J->d_名称);
}
}
而((closedir(cwd)=-1)和&(errno==EINTR));
打印直方图(第一);
返回0;
}
检查strcmp(j->d_name,“.”==0,如果为true,则忽略目录

顺便说一下,非常不规范的名称,
j

检查strcmp(j->d_name,“.”==0,如果为真,则忽略目录


顺便说一句,
j
是一个非常不规范的名称。

忽略strcmp(j->d_name,“…”)==0的情况可能也是一个好主意。你们都是对的。抱歉,没有说明的var名称。我的创造力在清晨逐渐衰退。我将在重构时考虑到这一点。忽略strcmp(j->d_name,“…”)==0的情况可能也是一个好主意。你们都是对的。抱歉,没有说明的var名称。我的创造力在清晨逐渐衰退。我将在重构时考虑到这一点。