没有 Qt 的 C++ 中的 os.path 等价物?
The os.path equivalent in C++ without Qt?
我需要设置一个目录,然后读取里面文件的所有文件名,并将整个路径存储在一个变量中。稍后我需要使用这个变量来打开文件并读取它。我不想为此使用 QDir
。我看到问题的第二个答案here。我可以用boost/filesystem.hpp
(相信这个不用单独下载)。但问题是执行将如下所示:
$ g++ -o test test.cpp -lboost_filesystem -lboost_system
$ ./test
我的第一行,用于创建可执行对象,由于 OpenCV 库已经很复杂,我不想添加它。我想让它们保持简单(以下行加上 OpenCV 想要的任何内容):
g++ -o test test.cpp
有什么办法吗?
这是我要为其编写 C++ 代码的 python 代码:
root_dir = 'abc'
img_dir = os.path.join(root_dir,'subimages')
img_files = os.listdir(img_dir)
for files in img_files:
img_name = os.path.join (img_dir,files)
img = cv2.imread(img_name)
您的选择是使用 boost、QDir、自己动手,或者使用更新的编译器,该编译器采用了为 C++17 准备的一些 TR2 功能。下面是一个示例,它大致应该使用 C++17 功能以系统不可知的方式遍历文件。
#include <filesystem>
namespace fs = std::experimental::filesystem;
...
fs::directory_iterator end_iter;
fs::path subdir = fs::dir("abc") / fs::dir("subimages");
std::vector<std::string> files;
for (fs::directory_iterator dir_iter(subdir); dir_iter != end_iter; dir_iter++) {
if (fs::is_regular_file(dir_iter->status())) {
files.insert(*dir_iter);
}
}
对于Linux或POSIX....
您可以使用低级别 nftw(3) or opendir(3) & readdir(3) etc... Of course you'll need to deal with dirty details (skipping .
& ..
entries, assembling the file path from the entry and the directory path, handling errors, etc...). You might also need stat(2)。
您应该阅读 Advanced Linux Programming & syscalls(2) 以获得更广阔的视野。
对于其他操作系统(特别是 Windows),您需要其他低级功能。
顺便说一句,您可以查看 QDir
的 Qt 源代码
您也可以考虑使用 POCO
我需要设置一个目录,然后读取里面文件的所有文件名,并将整个路径存储在一个变量中。稍后我需要使用这个变量来打开文件并读取它。我不想为此使用 QDir
。我看到问题的第二个答案here。我可以用boost/filesystem.hpp
(相信这个不用单独下载)。但问题是执行将如下所示:
$ g++ -o test test.cpp -lboost_filesystem -lboost_system
$ ./test
我的第一行,用于创建可执行对象,由于 OpenCV 库已经很复杂,我不想添加它。我想让它们保持简单(以下行加上 OpenCV 想要的任何内容):
g++ -o test test.cpp
有什么办法吗?
这是我要为其编写 C++ 代码的 python 代码:
root_dir = 'abc'
img_dir = os.path.join(root_dir,'subimages')
img_files = os.listdir(img_dir)
for files in img_files:
img_name = os.path.join (img_dir,files)
img = cv2.imread(img_name)
您的选择是使用 boost、QDir、自己动手,或者使用更新的编译器,该编译器采用了为 C++17 准备的一些 TR2 功能。下面是一个示例,它大致应该使用 C++17 功能以系统不可知的方式遍历文件。
#include <filesystem>
namespace fs = std::experimental::filesystem;
...
fs::directory_iterator end_iter;
fs::path subdir = fs::dir("abc") / fs::dir("subimages");
std::vector<std::string> files;
for (fs::directory_iterator dir_iter(subdir); dir_iter != end_iter; dir_iter++) {
if (fs::is_regular_file(dir_iter->status())) {
files.insert(*dir_iter);
}
}
对于Linux或POSIX....
您可以使用低级别 nftw(3) or opendir(3) & readdir(3) etc... Of course you'll need to deal with dirty details (skipping .
& ..
entries, assembling the file path from the entry and the directory path, handling errors, etc...). You might also need stat(2)。
您应该阅读 Advanced Linux Programming & syscalls(2) 以获得更广阔的视野。
对于其他操作系统(特别是 Windows),您需要其他低级功能。
顺便说一句,您可以查看 QDir
您也可以考虑使用 POCO