gpt4 book ai didi

c++ - 根据创建日期对文件进行排序?

转载 作者:太空狗 更新时间:2023-10-29 20:57:36 24 4
gpt4 key购买 nike

第一个问题解决了。文件整理得很好。

for (int i = 0; i < allFiles.GetSize(); i++)
{
box1.AddString(allFiles[i]);
}

vector<file> files;

vector<tstring> vec;
vec.insert(vec.begin(), &allFiles[0], &allFiles[allFiles.GetSize() - 1] + 1);

transform(vec.begin(), vec.end(),back_inserter(files),[](wstring const &fname)
{
WIN32_FIND_DATA d;
HANDLE h = FindFirstFile(fname.c_str(), &d);
FindClose(h);
return d;
}

);

sort(files.begin(), files.end());
CStringArray sortFiles;
files.insert(files.begin(), &sortFiles[0], &sortFiles[sortFiles.GetSize() - 1] + 1);

现在的问题是我如何在 CStringArray 中保存排序文件。 Last Statement 显示错误看到评论了吗?

最佳答案

我会:

  1. 创建一个类型来保存文件名和时间戳。
  2. 使用FindFirstFile获取您关心的每个文件的时间戳。
  3. 创建名称/时间戳对象并将其存储到 vector 中。
  4. 调用FindClose对于那个文件。
  5. 对每个输入文件名从 2 开始重复。
  6. 根据时间戳对 vector 进行排序。
  7. 显示结果。

因此,一种可能的实现方式可能如下所示:

#include <iostream>
#include <Windows.h>
#include <algorithm>
#include <string>
#include <vector>
#include <iomanip>

class file {
std::string name;
FILETIME time;
public:
bool operator<(file const &other) const {
return CompareFileTime(&time, &other.time) == 1;
}

friend std::ostream &operator<<(std::ostream &os, file const &f) {
SYSTEMTIME st;
FileTimeToSystemTime(&f.time, &st);
return os << std::setw(20) << f.name << "\t" << st.wHour << ":" << st.wMinute << ":" << st.wSecond << " " << st.wYear << "/" << st.wMonth << "/" << st.wDay;
}

file(WIN32_FIND_DATA const &d) : name(d.cFileName), time(d.ftCreationTime) {}
};

int main(){
std::vector<std::string> inputs{ "a.txt", "b.txt" };

std::vector<file> files;

std::transform(inputs.begin(), inputs.end(),
std::back_inserter(files),
[](std::string const &fname) {
WIN32_FIND_DATA d;
HANDLE h = FindFirstFile(fname.c_str(), &d);
FindClose(h);
return d;
}
);

std::sort(files.begin(), files.end());
std::copy(files.begin(),files.end(),
std::ostream_iterator<file>(std::cout, "\n"));
}

要处理文件名的“宽”(Unicode) 字符串,您需要(稍微)修改它看起来像这样:

#include <iostream>
#include <Windows.h>
#include <algorithm>
#include <string>
#include <vector>
#include <iomanip>

class file {
std::wstring name;
FILETIME time;
public:
bool operator<(file const &other) const {
return CompareFileTime(&time, &other.time) == 1;
}

friend std::wostream &operator<<(std::wostream &os, file const &f) {
SYSTEMTIME st;
FileTimeToSystemTime(&f.time, &st);
return os << std::setw(20) << f.name << L"\t" << st.wHour << L":" << st.wMinute << L":" << st.wSecond << L" " << st.wYear << L"/" << st.wMonth << L"/" << st.wDay;
}

file(WIN32_FIND_DATA const &d) : name(d.cFileName), time(d.ftCreationTime) {}
};

int main(){
std::vector<std::wstring> inputs{ L"a.txt", L"b.txt" };

std::vector<file> files;

std::transform(inputs.begin(), inputs.end(),
std::back_inserter(files),
[](std::wstring const &fname) {
WIN32_FIND_DATA d;
HANDLE h = FindFirstFile(fname.c_str(), &d);
FindClose(h);
return d;
}
);

std::sort(files.begin(), files.end());
for (auto const &f : files)
std::wcout << f << L"\n";
}

然后当您构建它时,您需要通过在编译时定义 UNICODE 来告诉编译器您需要 Windows 函数的 Unicode 版本:

cl -DUNICODE files.cpp

关于c++ - 根据创建日期对文件进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043803/

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