将向量 <file> 存储在 CStringArray 中?

Store vector<file> in CStringArray?

这属于 visual studio 2013 (v120)。如何在 visual studio 2010(v100) 中进行转换?

struct {
        bool operator()(const CString &a, const CString &b)
        {
            WIN32_FIND_DATA fa{0},fb{0};
            HANDLE h;

            h = FindFirstFile(a, &fa);
            if (h != INVALID_HANDLE_VALUE) FindClose(h);
            h = FindFirstFile(b, &fb);
            if (h != INVALID_HANDLE_VALUE) FindClose(h);

            return 1 == CompareFileTime(&fa.ftCreationTime, &fb.ftCreationTime);
        }
    } sortproc;

两个错误: 首先:h = FindFirstFile(b, &fb); 13 IntelliSense:标识符 "fb" 未定义 c:\users\administrator\documents\visual studio 2010\projects\file cleaner\file cleaner\search.h 90 25 文件清理器

第二个:WIN32_FIND_DATAfa{0},fb{0}; 12 IntelliSense:应为“;” c:\users\administrator\documents\visual 工作室 2010\projects\file cleaner\file cleaner\search.h 85 21 文件清理器

你不能对 CStringArray 进行排序(至少不容易),你必须将其转换为 vector<wstring>vector<string>

用这个来转换CStringArray to/from vector<wstring>:

CStringArray sa;
vector<wstring> vws;

vws.resize(0);  //CStringArray to vector<string>
for (int i = 0; i < sa.GetCount(); i++)
    vws.push_back((const wchar_t*)sa[i]);

sa.RemoveAll(); //vector<string> back to CStringArray
for (int i = 0; i < (int)vws.size(); i++)
    sa.Add(vws[i].c_str());

CString 在 MFC 中有一席之地,但 CStringArray 不是那么重要,您可以取消它并使用 vector<CString> 代替:

vector<CString> vcs;
//fill vcs...

struct {
    bool operator()(const CString &a, const CString &b)
    {
        WIN32_FIND_DATA fa{ 0 }, fb{ 0 };
        HANDLE h;

        h = FindFirstFile(a, &fa);
        if (h != INVALID_HANDLE_VALUE) FindClose(h);

        h = FindFirstFile(b, &fb);
        if (h != INVALID_HANDLE_VALUE) FindClose(h);

        return 1 == CompareFileTime(&fa.ftCreationTime, &fb.ftCreationTime);
    }
} sortproc;

sort(vcs.begin(), vcs.end(), sortproc);