c++保存最近n天文件夹
时间: 2023-12-19 13:08:00 浏览: 113
要最近n天的文件夹,可以使用以下步骤:
1. 获取当前日期和时间,可以使用C++标准库中的time和localtime函数。
2. 遍历指定目录下的所有文件夹,可以使用C++标准库中的<dirent.h>头文件中的函数opendir和readdir。
3. 对于每个文件夹,获取其创建时间,可以使用C++标准库中的<sys/stat.h>头文件中的函数stat和st_mtime字段。
4. 判断文件夹是否是最近n天内创建的,可以将当前时间减去文件夹创建时间得到时间差,再将时间差转化为天数。
5. 如果文件夹是最近n天内创建的,将其复制到指定目录下的一个新文件夹。
以下是一个示例代码,实现了上述步骤:
```c++
#include <iostream>
#include <dirent.h>
#include <sys/stat.h>
#include <string>
#include <chrono>
#include <ctime>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
void copy_dir(const fs::path& src_path, const fs::path& dst_path) {
if (!fs::exists(dst_path)) {
fs::create_directory(dst_path);
}
for (const auto& entry : fs::recursive_directory_iterator(src_path)) {
const auto& path = entry.path();
const auto& relative_path = fs::relative(path, src_path);
const auto& new_path = dst_path / relative_path;
if (fs::is_directory(path)) {
fs::create_directory(new_path);
} else {
fs::copy_file(path, new_path, fs::copy_options::overwrite_existing);
}
}
}
int main() {
// 设置要保存的天数
const int n_days = 7;
// 获取当前时间
auto now = chrono::system_clock::now();
auto time = chrono::system_clock::to_time_t(now);
auto tm = localtime(&time);
// 遍历指定目录下的所有文件夹
const string src_dir = "/path/to/src/dir";
const string dst_dir = "/path/to/dst/dir";
DIR* dir = opendir(src_dir.c_str());
dirent* dp;
while ((dp = readdir(dir)) != nullptr) {
if (dp->d_name[0] == '.') {
continue; // 忽略隐藏文件夹
}
const string dir_path = src_dir + '/' + dp->d_name;
// 获取文件夹的创建时间
struct stat st;
stat(dir_path.c_str(), &st);
auto mtime = st.st_mtime;
// 判断文件夹是否是最近n天内创建的
auto diff = chrono::duration_cast<chrono::hours>(now - chrono::system_clock::from_time_t(mtime));
if (diff.count() / 24 <= n_days) {
// 复制文件夹到指定目录下的一个新文件夹
const string new_dir_path = dst_dir + '/' + dp->d_name;
fs::path src_path = dir_path;
fs::path dst_path = new_dir_path;
copy_dir(src_path, dst_path);
}
}
closedir(dir);
return 0;
}
```
阅读全文