将向量 <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);
这属于 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);