如何将目录名称作为参数传递并输出其中的文件列表?

Posted

技术标签:

【中文标题】如何将目录名称作为参数传递并输出其中的文件列表?【英文标题】:How can I pass a directory name as an argument and output a list of files in it? 【发布时间】:2022-01-22 21:25:23 【问题描述】:

这个程序应该得到一个目录名作为参数。我有一段工作代码可以打印目录中的文件名。但是我怎么能在这里传递目录名呢?

#include <dirent.h> 
#include <stdio.h> 

int main(int argc, char* argv[]) 
  DIR *d;
  struct dirent *dir;
  d = opendir(".");
  if (d) 
    while ((dir = readdir(d)) != NULL) 
      printf("%s\n", dir->d_name);
    
    closedir(d);
  
  return(0);

【问题讨论】:

if ((d = opendir(argv[1])) != NULL) /* work with d */ closedir(d); else perror(argv[1]); exit(EXIT_FAILURE); 您可以在命令行中将参数传递给您的程序。所有参数都通过main 的参数提供给您的代码。了解argcargv 的含义。然后只需将你得到的名字传递给opendir 【参考方案1】:

您应该从命令行获取full path 作为程序的参数。在代码的main 函数中,有两个参数:int argc & char* argv[]

int argc 表示您的程序在执行时收到的参数数量。程序的名称本身就是一个参数。

例如,在 ./a.out argument1 argument2 中,a.out 程序的 argc 将等于 3。

char* argv[] 是一个由char* 组成的数组,所有这些都指向一个参数。

在前面的示例中,argv[0] == 'a.out'argv[1] == 'argument1'argv[2] == 'argument2'

现在更改您的代码如下:

#include <dirent.h> 
#include <stdio.h> 

int main(int argc, char* argv[]) 
  DIR *d;
  struct dirent *dir;
  if(argc==2)
    char* path = argv[1];
    d = opendir(path);
    if (d) 
      while ((dir = readdir(d)) != NULL) 
        printf("%s\n", dir->d_name);
      
      closedir(d);
    
    return(0);
  else
      printf("Wrong number of arguments");
      return 1;
  
  

那么你应该如下调用程序:

./name_of_the_program /path/to/the/dir

【讨论】:

您应该添加强制检查是否有额外的参数可用。并且一些解释为什么使用索引1 可能也有助于OP。 你说得对,我更新了代码 Wrong number of arguments 听起来像是一条错误消息。 fprintf(stderr, "...");

以上是关于如何将目录名称作为参数传递并输出其中的文件列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将内存流作为字符串传递给 javascript

如何在批处理文件中传递参数

Rshiny:如何将 renderUI 输出传递给 Selectinput 中的 chocies 参数

如何将列表的所有元素作为函数的参数传递而不将列表作为参数传递

如何在 API 调用中将输入值作为参数传递?

bash:以空格作为参数传递路径?