gpt4 book ai didi

c++ - 如何使用 C++ 不使用 system() 删除除最后 10 个文件之外的所有文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:52:21 26 4
gpt4 key购买 nike

如何在不使用 system() 的情况下实现 system("ls -t1 . | tail -n +11 | xargs rm -rf")。我只想在我的 linux 文件夹中保留最新的 10 个文件,当我调用 C++ 函数时,其余的文件应该被删除。

最佳答案

这里有一些 C++ 代码,不需要存储所有条目,而只是记住最旧的 10 个条目并删除较新的条目。

与删除文件的代码一样请小心,如果运行以下代码,它将删除文件

#include <filesystem>
#include <vector>
#include <queue>
#include <iostream>

namespace fs = std::filesystem;
using pathvec = std::vector<fs::directory_entry>;

struct newer_file {
bool operator()(const fs::directory_entry& p, const fs::directory_entry& p2)
{
return p.last_write_time() < p2.last_write_time();
}
};

void delete_newest(fs::path directory, int keep_n = 10)
{
//store N oldest entries, delete any that are newer
std::priority_queue<fs::directory_entry, pathvec, newer_file> oldestN;
for (auto entry : fs::directory_iterator(directory))
{
oldestN.push(entry);
if (oldestN.size() > keep_n)
{
//careful, recursive delete
fs::remove_all(oldestN.top());
oldestN.pop();
}
}
}

int main(int argc, const char** argv)
{
if (argc < 2)
{
std::cout << "argument needed" << std::endl;
return -1;
}
delete_newest(fs::path(argv[1]));
return 0;
}

关于c++ - 如何使用 C++ 不使用 system() 删除除最后 10 个文件之外的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54751321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com