【问题标题】:How do I print the values of every file in a directory in C?如何打印 C 目录中每个文件的值?
【发布时间】:2014-10-19 02:48:58
【问题描述】:

我不确定我应该如何读取目录中的文件。当我调用我的打印功能时,它会出现段错误。有人可以帮忙吗?我认为它与路径名有关,但我不知道如何修复它。

我知道我的打印功能没有问题,因为它可以很好地打印常规文件。

int main(int argc, char **argv){
     DIR *d;
     struct dirent *dir;
     d = opendir(argv[1]);
     FILE *fp;

     if(d){
          while((dir = readdir(d)) != NULL){
               if(strcmp(dir->d_name, ".") == 0)
                       continue;
               if(strcmp(dir->d_name, ".." == 0)
                       continue;

               fp = fopen(dir->d_name, "r");
               //print function on fp
          }
     }      

     return 0;
}

【问题讨论】:

  • 我们需要查看您的打印功能。你说它处理常规文件,但是目录和符号链接,以及具有不同权限的文件呢?如果您通过 Valgrind 运行程序,它应该会告诉您发生段错误的位置。

标签: c file directory


【解决方案1】:

您必须将dir->d_name 附加到argv[1](当然带有'/')才能创建文件的完整路径。否则,您只能打开当前目录中的文件。或者,您可以使用chdir 将当前目录更改为argv[1]

为避免段错误,您应该检查来自fopen 的返回值。实际上,您应该始终检查来自fopen 的返回值,因为它经常失败,尤其是在开发过程中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 2019-04-08
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多