libsaria: Read a directory into two vectors
I separate out directories and files so they can be processed differenty.
This commit is contained in:
parent
dfdb38be27
commit
5167c6f012
|
@ -0,0 +1,18 @@
|
|||
#ifndef LIBSARIA_PATH_H
|
||||
#define LIBSARIA_PATH_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
struct file
|
||||
{
|
||||
string name;
|
||||
ino_t d_ino;
|
||||
};
|
||||
|
||||
void readdir(string, vector<file> &, vector<file> &);
|
||||
|
||||
#endif /* LIBSARIA_PATH_H */
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
#include <libsaria/print.h>
|
||||
#include <libsaria/idle.h>
|
||||
#include <libsaria/path.h>
|
||||
|
||||
#include "library.h"
|
||||
#include "path.h"
|
||||
|
@ -41,4 +42,12 @@ ScanTask::~ScanTask()
|
|||
*/
|
||||
void ScanTask::run_task()
|
||||
{
|
||||
vector<file> files;
|
||||
vector<file> dirs;
|
||||
|
||||
readdir(dir, files, dirs);
|
||||
for (unsigned int i = 0; i < files.size(); i++)
|
||||
print("File: " + files[i].name);
|
||||
for (unsigned int i = 0; i < dirs.size(); i++)
|
||||
print("Dir: " + dirs[i].name);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
#include <libsaria/path.h>
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
/* I want to use the d_type field in a dirent */
|
||||
#ifndef __USE_BSD
|
||||
#define __USE_BSD
|
||||
#endif
|
||||
|
||||
static void sort_entry(struct dirent *dirp, vector<file> &files, vector<file> &dirs)
|
||||
{
|
||||
struct file entry;
|
||||
|
||||
if (dirp == NULL)
|
||||
return;
|
||||
|
||||
entry.name = dirp->d_name;
|
||||
entry.d_ino = dirp->d_ino;
|
||||
if (entry.name == "." || entry.name == "..")
|
||||
return;
|
||||
|
||||
switch(dirp->d_type) {
|
||||
case DT_DIR:
|
||||
dirs.push_back(entry);
|
||||
break;
|
||||
case DT_REG:
|
||||
files.push_back(entry);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void readdir(string dir, vector<file> &files, vector<file> &dirs)
|
||||
{
|
||||
DIR *dp;
|
||||
struct dirent *dirp;
|
||||
|
||||
dp = opendir(dir.c_str());
|
||||
if (dp == NULL)
|
||||
return;
|
||||
|
||||
do {
|
||||
dirp = readdir(dp);
|
||||
sort_entry(dirp, files, dirs);
|
||||
} while (dirp != NULL);
|
||||
|
||||
closedir(dp);
|
||||
}
|
Loading…
Reference in New Issue