如何将目录名称作为参数传递并输出其中的文件列表?
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
的参数提供给您的代码。了解argc
和argv
的含义。然后只需将你得到的名字传递给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, "...");
以上是关于如何将目录名称作为参数传递并输出其中的文件列表?的主要内容,如果未能解决你的问题,请参考以下文章
Rshiny:如何将 renderUI 输出传递给 Selectinput 中的 chocies 参数