[英]Open directory using C
我正在接受通过命令行输入的路径。
当我做
dir=opendir(args[1]);
它没有进入循环...即dir==null
...
如何将命令行输入传递给 dir 指针?
void main(int c,char **args)
{
DIR *dir;
struct dirent *dent;
char buffer[50];
strcpy(buffer, args[1]);
dir = opendir(buffer); //this part
if(dir!=NULL)
{
while((dent=readdir(dir))!=NULL)
printf(dent->d_name);
}
close(dir);
}
./a.out /root/TEST is used to run the program..
./a.out --> to execute the program
/root/TEST --> input by the user i.e valid path
你真的应该发布你的代码(a) ,但这里是。 从以下内容开始:
#include <stdio.h>
#include <dirent.h>
int main (int argc, char *argv[]) {
struct dirent *pDirent;
DIR *pDir;
// Ensure correct argument count.
if (argc != 2) {
printf ("Usage: testprog <dirname>\n");
return 1;
}
// Ensure we can open directory.
pDir = opendir (argv[1]);
if (pDir == NULL) {
printf ("Cannot open directory '%s'\n", argv[1]);
return 1;
}
// Process each entry.
while ((pDirent = readdir(pDir)) != NULL) {
printf ("[%s]\n", pDirent->d_name);
}
// Close directory and exit.
closedir (pDir);
return 0;
}
您需要检查您的情况, args[1]
已设置并引用实际目录。 一个示例运行, tmp
是我当前目录下的一个子目录,但您可以使用任何有效目录,给我: testprog tmp
[.]
[..]
[file1.txt]
[file1_file1.txt]
[file2.avi]
[file2_file2.avi]
[file3.b.txt]
[file3_file3.b.txt]
另请注意,您必须传入目录,而不是文件。 当我执行:
testprog tmp/file1.txt
我得到:
Cannot open directory 'tmp/file1.txt'
那是因为它是一个文件而不是一个目录(不过,如果你偷偷摸摸,如果初始diropen
失败,你可以尝试使用diropen(dirname(argv[1]))
)。
(a)现在已经更正了,但是,由于这个答案已被接受,我将假设这是您传入的任何问题。
关于代码段的一些反馈,但在大多数情况下,它应该可以工作......
void main(int c,char **args)
int main
- 标准将main
定义为返回一个int
。c
和args
通常被命名为argc
和argv
,恭敬地,但你可以给它们命名任何东西...
{
DIR *dir;
struct dirent *dent;
char buffer[50];
strcpy(buffer,args[1]);
args[1]
长于 50 个字节,则buffer
将无法容纳它,并且您将写入不应该写入的内存。 我没有理由在这里看到复制缓冲区,所以你可以通过不使用strcpy
来回避这些问题.........
dir=opendir(buffer); //this part
如果返回NULL
,可能有以下几个原因:
./your_program my directory
,这会失败,因为它试图opendir("my")
)传递给 C 程序可执行文件的参数只不过是一个字符串数组(或字符指针),因此在您的程序访问这些参数之前,已经为这些输入参数分配了内存,因此无需分配缓冲区,这样您就可以避免程序中的错误处理代码(减少段错误的机会:))。
这是使用c
实现ls
命令的简单方法。 运行使用例如./xls /tmp
#include<stdio.h>
#include <dirent.h>
void main(int argc,char *argv[])
{
DIR *dir;
struct dirent *dent;
dir = opendir(argv[1]);
if(dir!=NULL)
{
while((dent=readdir(dir))!=NULL)
{
if((strcmp(dent->d_name,".")==0 || strcmp(dent->d_name,"..")==0 || (*dent->d_name) == '.' ))
{
}
else
{
printf(dent->d_name);
printf("\n");
}
}
}
close(dir);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.