在 c 中正确使用 ftw()



我的代码中有以下内容:(用c编码)

    ftw(argv[2], parseFile, 100)  

argv[2] 是一个本地目录路径。例如。argv[2] = "TestCases",在我的 .o 文件所在的目录中有一个 testcases 文件夹。

我的理解是,这应该遍历目录 TestCases 并将其找到的每个文件发送到函数 parseFile。

实际发生的是它只是将我的参数发送到函数 parseFile,仅此而已。我做错了什么?我应该如何正确使用它?

编辑:这是解析文件:

int parseFile(const char * ftw_filePath,const struct stat * ptr, int flags){
    FILE * file;
    TokenizerT * currFile;
    char fileString[1000], * currWord, * fileName;
    fileName = strdup(ftw_filePath);
    if( fileName == NULL || strlen(fileName) <= 0){
        free(fileName);
        return -1;
    }
    printf("n%sn",fileName);
    if(strcmp(fileName,"-h")== 0){
        printf("To run this program(wordstats) type './wordstat.c' followed by a space followed by the file's directory location. (e.g. Desktop/CS211/Assignment1/test.txt )");
        free(fileName);
        return 1;
    }
    else{
        file=fopen(fileName,"r");
    }
    if(!file){
        fprintf(stderr,"Error: File Does not Exist in designated location. Please restart the program and try again.n");
        free(fileName);
        return 0;
    }
    memset(fileString, '', 1000);
    while(fscanf(file,"%s", fileString) != EOF){ /* traverses the file line by line*/
            stringToLower(fileString);
            currFile = TKCreate("alphanum",fileString);
            while((currWord = TKGetNextToken(currFile)) != NULL) {
                insert_List(currWord, words,fileName);
            }
            free(currFile->delimiters);
            free(currFile->copied_string);
            free(currFile);
        memset(fileString, '', 1000);
    }
    fclose(file);
    free(fileName);
    return 1;
}

如果我为我的 argv[2] 输入 TestCases/big.txt,它将起作用,但如果我输入 TestCases 则不起作用

如手册页中所述,ftw 正在调用的函数的非零返回值会告诉 ftw 停止运行。

您的代码具有各种 return 语句,但唯一返回 0 的语句是错误条件。

设计正确的 C 回调接口具有 void* 参数,可用于将任意数据从周围的代码传递到回调中。[n]ftw没有这样的论点,所以你有点像小溪。

如果你的编译器支持线程局部变量(__thread存储说明符),你可以使用它们而不是全局变量;这将起作用,但实际上并不比全局变量整齐。

如果您的 C 库具有 fts 系列函数,请改用这些函数。它们在大多数现代Unix上都可用(包括Linux,OSX和最近的*BSD)。

相关内容

  • 没有找到相关文章

最新更新