error: ‘get_time’ is not a member of ‘std’ 43 | ss >> std::get_time(&time_parts, "%Y-%m-%d-%H-%M");
时间: 2024-03-17 21:40:56 浏览: 351
这个错误通常发生在您的编译器不支持 C++11 标准的情况下。 `std::get_time` 是 C++11 中新增的函数,它用于将时间字符串解析为 `std::tm` 结构体。请尝试将编译器标志设置为 `-std=c++11` 或以上。
如果您的编译器不支持 C++11,您可以使用 `std::istringstream` 代替 `std::stringstream` ,并使用 `std::getline` 函数将时间字符串分解为年、月、日、小时和分钟。以下是修改后的代码:
```c++
void check_logs_size() {
std::string logs_path = "./logs/";
std::filesystem::path logs_dir(logs_path);
std::uintmax_t total_size = 0;
for (const auto& file : std::filesystem::recursive_directory_iterator(logs_dir)) {
if (std::filesystem::is_regular_file(file)) {
total_size += std::filesystem::file_size(file);
}
}
if (total_size > 10 * 1024 * 1024 * 1024) {
std::filesystem::path earliest_dir;
std::time_t earliest_time = std::time(nullptr);
for (const auto& dir : std::filesystem::directory_iterator(logs_dir)) {
if (std::filesystem::is_directory(dir)) {
std::string dir_name = dir.path().filename().string();
std::tm time_parts = {};
std::istringstream ss(dir_name);
std::string part;
std::getline(ss, part, '-');
time_parts.tm_year = std::stoi(part) - 1900;
std::getline(ss, part, '-');
time_parts.tm_mon = std::stoi(part) - 1;
std::getline(ss, part, '-');
time_parts.tm_mday = std::stoi(part);
std::getline(ss, part, '-');
time_parts.tm_hour = std::stoi(part);
std::getline(ss, part, '-');
time_parts.tm_min = std::stoi(part);
std::time_t dir_time = std::mktime(&time_parts);
if (dir_time < earliest_time) {
earliest_time = dir_time;
earliest_dir = dir.path();
}
}
}
if (!earliest_dir.empty()) {
std::filesystem::remove_all(earliest_dir);
}
}
}
```
这个版本使用 `std::istringstream` 将时间字符串分解为年、月、日、小时和分钟,然后使用 `std::stoi` 函数将字符串转换为整数,并将它们设置为 `std::tm` 结构体的成员变量。最后,我们使用 `std::mktime` 函数将 `std::tm` 结构体转换为 `std::time_t` 类型的时间戳。
阅读全文