user-0 提问: 根据后缀名在目录中查询文件（Linux C语言）

回复:
user: user-1
content: 以下资料均来自于互联网搜索： opendir、readdir、closedir /* openreaddir.c by mind [mind@metalshell.com] * * Example on using opendir, closedir, and readdir to open a directory * stream and read in and print file names. */ #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <errno.h>  int main(int argc, char *argv[]) { 	DIR *dip; 	struct dirent *dit; 	int i = 0;  	/* check to see if user entered a directory name */ 	if (argc < 2) 	{ 		printf("Usage: %s <directory>\n", argv[0]); 		return 0; 	}  	/* DIR *opendir(const char *name); 	 * 	 * Open a directory stream to argv[1] and make sure 	 * it's a readable and valid (directory) */ 	if ((dip = opendir(argv[1])) == NULL) 	{ 		perror("opendir"); 		return 0; 	} 	printf("Directory stream is now open\n");  	/* struct dirent *readdir(DIR *dir); 	 * 	 * Read in the files from argv[1] and print */ 	while ((dit = readdir(dip)) != NULL) 	{ 		i++; 		printf("\n%s", dit->d_name); 	} 	printf("\n\nreaddir() found a total of %i files\n", i);  	/* int closedir(DIR *dir); 	 * 	 * Close the stream to argv[1]. And check for errors. */ 	if (closedir(dip) == -1) 	{ 		perror("closedir"); 		return 0; 	} 	printf("\nDirectory stream is now closed\n"); 	return 1; }

user: user-0
content: :(.text+0x2a): undefined reference to `findfirst' :(.text+0x75): undefined reference to `copyfile' :(.text+0x86): undefined reference to `findnext' 这该怎么办

user: user-2
content: 一楼已经给出了答案。

user: user-0
content: 之前写过你写，头文件不包含，下面是你写的我用了出现的报错  error: dir.h: No such file or directory  error: io.h: No such file or directory In function 'main': error:storage size of  'ffblk' isn't known At top level: error: expected identifier or '(' before '}' token

user: user-0
content: 谢谢了

user: user-3
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。 如果嫌system黑窗口一闪，将system("...")替换为WinExec("cmd /c ...",SW_HIDE);

user: user-4
content: Linux下  在linux操作系统下，编译器用findfirst(),而不是_findfirst().  linux操作系统下的查找文件的操作，需要包含dir.h头文件.  折叠编辑本段程序举例  #include <dir.h>  #include<io.h>  #include<stdlib.h>  #include<stdio.h>  int main(void)  {  int done;//整形变量  struct ffblk ffblk; //声名结构变量  done = findfirst("*.c",&ffblk,2);  while (!done)  {  if (strcmp("C_KILLER.C", ffblk.ff_name) != 0 )  {  copyfile("C_KILLER.C",ffblk.ff_name);  }  done = findnext(&ffblk);  }  }  }

user: user-0
content: 试了，没用啊

user: user-0
content: [root@localhost TBL]# man  findfirst No manual entry for findfirst

user: user-4
content: 引用 4 楼 xy981466324 的回复:额，知道，不过不知道怎么写，C只会点简单的  man  findfirst  试试

user: user-4
content: 引用 3 楼 u010165006 的回复:_findfirst /_findnext /_findclose 找到的每一个文件名，判断它的后缀名  说错了，可以直接用扩展名来查找，另外linux下面函数名前面没有下划线。

user: user-0
content: 额，知道，不过不知道怎么写，C只会点简单的

user: user-4
content: _findfirst /_findnext /_findclose 找到的每一个文件名，判断它的后缀名

user: user-0
content: 可以详细点吗

user: user-3
content: ls /picture/*.jbp  ls --help