Filesystems 列出vxWorks中的目录(FindFirstFile(<;pattern>;)/FindNext(<;pattern>;)

Filesystems 列出vxWorks中的目录(FindFirstFile(<;pattern>;)/FindNext(<;pattern>;),filesystems,vxworks,Filesystems,Vxworks,如何以编程方式在vxWorks中列出目录内容?我知道“ll”,但它不返回目录项列表,也不返回“current”目录项(如Windows中的FindFirstFile()/FindNextFile()) 我打算在vxWorks上实现目录遍历(hrfs/DOSF) 如果解决方案也包括“*.txt”这样的“通配符”模式,那就更好了。VxWorks没有提供FindFirstFile(…)和FindNextFile(…)的便利性 我从几年前的一个实现中复制并粘贴了以下代码: #include <di

如何以编程方式在vxWorks中列出目录内容?我知道“ll”,但它不返回目录项列表,也不返回“current”目录项(如Windows中的FindFirstFile()/FindNextFile())

我打算在vxWorks上实现目录遍历(hrfs/DOSF)


如果解决方案也包括“*.txt”这样的“通配符”模式,那就更好了。

VxWorks没有提供
FindFirstFile(…)
FindNextFile(…)
的便利性

我从几年前的一个实现中复制并粘贴了以下代码:

#include <dirLib.h>
#include <dirent.h>

#define MAX_PATH_LEN   256

typedef struct tag_file_list
{
   DIR *pDir;
   CHARS search[MAX_PATH_LEN];
} FILE_LIST;


STATUS findFirstFile(char *search, FILE_LIST *list, struct dirent *info)
{
   STATUS result = ERROR;

   if ((search != NULL) && (list != NULL))
   {
      list->pDir = opendir(search);
      if (list->pDir != NULL)
      {
         strcpy(list->search, search);   // remember root path!

         result = findNextFile(list, info);
      }
   }

   return (result);
}


STATUS findNextFile(FILE_LIST *list, struct dirent *info)
{
   STATUS result = ERROR;
   struct dirent *entry;
   char fullPath[MAX_PATH_LEN];

   if (list != NULL)
   {
      entry = readdir(list->pDir);
      if (entry  != NULL)
      {
         if (info != NULL)
         {
            /* build full path information to query file statistics */
            sprintf(fullPath, "%s/%s", list->search, entry->d_name);

            result = stat(fullPath, info);                
         }
         else
         {
            result = OK;
         }
      }
   }

   if (result == ERROR)
   {
      closedir(list->pDir);
      list->pDir = NULL;
   }

   return (result);
}


/* usage */
FILE_LIST fl;
struct dirent info;

if (findFirstFile("/tffs0", &fl, &info) == OK)
{
   do
   {
      /* process found file */
   }
   while (findNextFile(&fl, &info) != ERROR);
}
#包括
#包括
#定义最大路径长度256
typedef结构标记文件列表
{
DIR*pDir;
字符搜索[MAX_PATH_LEN];
}文件清单;
状态findFirstFile(字符*搜索、文件列表*列表、结构目录*信息)
{
状态结果=错误;
如果((搜索!=NULL)&&(列表!=NULL))
{
列表->pDir=opendir(搜索);
如果(列表->pDir!=NULL)
{
strcpy(列表->搜索,搜索);//记住根路径!
结果=findNextFile(列表、信息);
}
}
返回(结果);
}
状态FindNext文件(文件列表*列表,结构目录*信息)
{
状态结果=错误;
结构方向*条目;
字符完整路径[最大路径长度];
如果(列表!=NULL)
{
entry=readdir(列表->pDir);
if(条目!=NULL)
{
如果(信息!=NULL)
{
/*生成完整路径信息以查询文件统计信息*/
sprintf(完整路径,“%s/%s”,列表->搜索,条目->d_名称);
结果=统计(完整路径、信息);
}
其他的
{
结果=正常;
}
}
}
如果(结果==错误)
{
closedir(列表->pDir);
列表->pDir=NULL;
}
返回(结果);
}
/*用法*/
文件清单fl;
结构方向信息;
如果(findFirstFile(“/tffs0”、&fl、&info)==OK)
{
做
{
/*进程找到文件*/
}
while(findNextFile(&fl,&info)!=错误);
}
这是非常基本的,不支持通配符模式。这将是一个很好的实现;)

我没有编译上面的代码,但它应该足以让你走上正轨!此外,关于缓冲区溢出(字符串函数),代码是不安全的