major changes
fs_reader now fully works header file has new file extension
This commit is contained in:
parent
f619b37126
commit
c437168ee9
@ -1,39 +1,81 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "fs_reader.h"
|
#include <vector>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <queue>
|
||||||
|
#include "fs_reader.hpp"
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
using std::vector, std::queue;
|
||||||
|
|
||||||
// from the provided path, find all files and folders
|
int validate(const fs::path path) {
|
||||||
// This is done by finding all the files and folders in the starting dir
|
if(!fs::exists(path))
|
||||||
// If a dir was found, then go into it, then find all files and folders in there
|
return 1;
|
||||||
// Rinse and Repeat
|
|
||||||
|
|
||||||
// Avoid recursion if possible
|
if (false)
|
||||||
std::vector<fs::path> find_all_files(fs::path path) {
|
return 1;
|
||||||
std::vector<fs::path> files = {};
|
|
||||||
|
|
||||||
for (const fs::directory_entry &entry : fs::directory_iterator(path))
|
return 0;
|
||||||
if (!entry.is_directory())
|
}
|
||||||
files.insert(files.begin()+files.size(), entry.path());
|
|
||||||
|
vector<fs::path> find_all_files(const fs::path path) {
|
||||||
|
if (validate(path) == 1)
|
||||||
|
return vector<fs::path>(0);
|
||||||
|
|
||||||
|
vector<fs::path> files;
|
||||||
|
queue<fs::path> folders_to_traverse;
|
||||||
|
folders_to_traverse.push(path);
|
||||||
|
|
||||||
|
while (!folders_to_traverse.empty()) {
|
||||||
|
for (const fs::directory_entry &entry : fs::directory_iterator(folders_to_traverse.front()))
|
||||||
|
if (!entry.is_directory())
|
||||||
|
files.emplace_back(entry);
|
||||||
|
else
|
||||||
|
folders_to_traverse.push(entry);
|
||||||
|
|
||||||
|
folders_to_traverse.pop();
|
||||||
|
}
|
||||||
|
|
||||||
files.shrink_to_fit();
|
files.shrink_to_fit();
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<fs::path> find_all_folders(fs::path path) {
|
vector<fs::path> find_all_folders(const fs::path path) {
|
||||||
std::vector<fs::path> folders = {};
|
if (validate(path) == 1)
|
||||||
|
return vector<fs::path>(0);
|
||||||
|
|
||||||
for (const fs::directory_entry &entry : fs::directory_iterator(path))
|
vector<fs::path> folders;
|
||||||
if (entry.is_directory())
|
queue<fs::path> folders_to_traverse;
|
||||||
folders.insert(folders.begin()+folders.size(), entry.path());
|
folders_to_traverse.push(path);
|
||||||
|
|
||||||
|
while (!folders_to_traverse.empty()) {
|
||||||
|
for (const fs::directory_entry &entry : fs::directory_iterator(folders_to_traverse.front()))
|
||||||
|
if (entry.is_directory()) {
|
||||||
|
folders.emplace_back(entry);
|
||||||
|
folders_to_traverse.push(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
folders_to_traverse.pop();
|
||||||
|
}
|
||||||
|
|
||||||
folders.shrink_to_fit();
|
folders.shrink_to_fit();
|
||||||
return folders;
|
return folders;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<fs::path> find_all_files_and_folders(fs::path path) {
|
vector<fs::path> find_all_files_and_folders(const fs::path path) {
|
||||||
std::vector<fs::path> files_and_folders = {};
|
if (validate(path) == 1)
|
||||||
|
return vector<fs::path>(0);
|
||||||
|
|
||||||
for (const fs::directory_entry &entry : fs::directory_iterator(path))
|
vector<fs::path> files_and_folders;
|
||||||
files_and_folders.insert(files_and_folders.begin()+files_and_folders.size(), entry.path());
|
queue<fs::path> folders_to_traverse;
|
||||||
|
folders_to_traverse.push(path);
|
||||||
|
|
||||||
|
while (!folders_to_traverse.empty()) {
|
||||||
|
for (const fs::directory_entry &entry : fs::directory_iterator(folders_to_traverse.front())) {
|
||||||
|
files_and_folders.emplace_back(entry);
|
||||||
|
if (entry.is_directory())
|
||||||
|
folders_to_traverse.push(entry);
|
||||||
|
}
|
||||||
|
folders_to_traverse.pop();
|
||||||
|
}
|
||||||
|
|
||||||
files_and_folders.shrink_to_fit();
|
files_and_folders.shrink_to_fit();
|
||||||
return files_and_folders;
|
return files_and_folders;
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
#include <filesystem>
|
|
||||||
namespace fs = std::filesystem;
|
|
||||||
|
|
||||||
std::vector<fs::path> find_all_files(fs::path path);
|
|
||||||
std::vector<fs::path> find_all_folders(fs::path path);
|
|
||||||
std::vector<fs::path> find_all_files_and_folders(fs::path path);
|
|
6
src/fs_reader.hpp
Normal file
6
src/fs_reader.hpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <vector>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
std::vector<std::filesystem::path> find_all_files(const std::filesystem::path path);
|
||||||
|
std::vector<std::filesystem::path> find_all_folders(const std::filesystem::path path);
|
||||||
|
std::vector<std::filesystem::path> find_all_files_and_folders(const std::filesystem::path path);
|
18
src/main.cpp
18
src/main.cpp
@ -1,24 +1,28 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "fs_reader.h"
|
#include <vector>
|
||||||
|
#include <filesystem>
|
||||||
|
#include "fs_reader.hpp"
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
using std::cout, std::vector;
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
std::cout << "chksum: No path specified\n";
|
cout << "chksum: No path specified\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (argc > 2) {
|
if (argc > 2) {
|
||||||
std::cout << "chksum: Too many arguments\n";
|
cout << "chksum: Too many arguments\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (!fs::exists(argv[1])) {
|
if (!fs::exists(argv[1])) {
|
||||||
std::cout << "chksum: Not a valid path\n";
|
cout << "chksum: Not a valid path\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<fs::path> files_and_folders = find_all_files_and_folders(argv[1]);
|
vector<fs::path> files_and_folders = find_all_files(argv[1]);
|
||||||
|
|
||||||
for (size_t index = 0; index < files_and_folders.size(); index++)
|
for (const fs::path &path : files_and_folders)
|
||||||
std::cout << "index " << index << ": " << files_and_folders.at(index) << std::endl;
|
cout << path << "\n";
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user