当前位置: 技术问答>linux和unix
请教:linux下的硬盘文件搜索函数怎么写?(用c or c++)
来源: 互联网 发布时间:2015-10-20
本文导语: 请教:linux下的硬盘文件搜索函数怎么写?(用c or c++) 有没有例子,提供一个也好?! | const char* FindFile( const char* dir, const char* name ) { #ifdef PRINT_TREE static int level=-1; level++; #endif ...
请教:linux下的硬盘文件搜索函数怎么写?(用c or c++)
有没有例子,提供一个也好?!
有没有例子,提供一个也好?!
|
const char* FindFile( const char* dir, const char* name )
{
#ifdef PRINT_TREE
static int level=-1;
level++;
#endif
DIR* dirp = opendir(dir);
if ( dirp != NULL )
{
struct dirent* dp;
while ( (dp = readdir(dirp)) != NULL )
{
/*
** build filename
*/
char filename[ NAME_MAX+1 ];
strcpy (filename, dir);
strcat (filename, "/");
strcat (filename, dp->d_name);
/*
** get file type
*/
struct stat buf;
if ( stat (filename, &buf) == 0 )
{
#ifdef PRINT_TREE
for ( int i=0; id_name );
if (S_ISDIR(buf.st_mode))
printf("/");
printf("n");
#endif
if (S_ISREG(buf.st_mode) && stricmp(dp->d_name, name) == 0)
{
closedir(dirp);
#ifdef PRINT_TREE
level--;
#endif
char* result = new char [strlen(filename)+1];
strcpy( result, filename );
return result;
}
else if (S_ISDIR(buf.st_mode) && strcmp (dp->d_name, ".") &&
strcmp (dp->d_name, ".."))
{
const char* found = FindFile( filename, name );
if ( found != NULL )
{
closedir(dirp);
#ifdef PRINT_TREE
level--;
#endif
return(found);
}
}
}
}
closedir(dirp);
}
#ifdef PRINT_TREE
level--;
#endif
return(NULL);
}
|
struct dirent
{
long d_ino; /* inode number */
off_t d_off; /* offset to this dirent */
unsigned short d_reclen; /* length of this d_name */
char d_name [NAME_MAX+1]; /* file name (null-terminated) */
}
到底需求是什么?
有些东西是可以调用系统完成的
{
long d_ino; /* inode number */
off_t d_off; /* offset to this dirent */
unsigned short d_reclen; /* length of this d_name */
char d_name [NAME_MAX+1]; /* file name (null-terminated) */
}
到底需求是什么?
有些东西是可以调用系统完成的
|
用c写不麻烦.
专职接分, 兼职回答
DIR *hpDir;
struct dirent *currFP = 0;
hpDir = opendir(你要找的目录);
if (hpDir == NULL){
return -1;
}
while ((currFP = readdir(hpDir)) != 0){
if (currFP->d_name == 你要找的东西 ){
//处理
}
}
专职接分, 兼职回答
DIR *hpDir;
struct dirent *currFP = 0;
hpDir = opendir(你要找的目录);
if (hpDir == NULL){
return -1;
}
while ((currFP = readdir(hpDir)) != 0){
if (currFP->d_name == 你要找的东西 ){
//处理
}
}
|
system("find / -name filename >findout");
然后读文件findout就可以了。
用c来写估计比较麻烦吧。
然后读文件findout就可以了。
用c来写估计比较麻烦吧。
|
看看find的源代码
|
opendir,readdir,fstat
http://linux.chinaunix.net/doc/program/2001-05-08/577.shtml
http://linux.chinaunix.net/doc/program/2001-05-08/577.shtml
|
专业顶贴 兼职接分
|
up
|
up