【问题标题】:Store vector<file> in CStringArray?在 CStringArray 中存储向量<file>?
【发布时间】:2015-07-14 19:14:42
【问题描述】:

这属于 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 File Cleaner

第二个:WIN32_FIND_DATA fa{0},fb{0}; 12 IntelliSense:应为“;” c:\users\administrator\documents\visual studio 2010\projects\文件清理器\文件清理器\search.h 85 21 文件清理器

【问题讨论】:

  • file 实际上是什么?
  • 您的代码似乎与您的问题无关(尽管尚不清楚该问题是什么),并且很难想象将vector&lt;file&gt; 存储在字符串数组中意味着什么。
  • 我假设您想要遍历您的 std::vector&lt;file&gt; 并将文件名存储在 CStringArray 中。但是为了什么?您可以从CStringstd::wstring 两者中获得wchar_t
  • 好的,我改进了代码。
  • 但我需要将文件存储在 CStringArray 中。我需要处理这些文件。

标签: c++ visual-studio-2010 visual-studio-2013 mfc


【解决方案1】:

您无法对CStringArray 进行排序(至少不容易),您必须将其转换为vector&lt;wstring&gt;vector&lt;string&gt; 等。

使用它来将CStringArray 转换为vector&lt;wstring&gt;/从vector&lt;wstring&gt;

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&lt;CString&gt;

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);

【讨论】:

  • 先生,您太棒了。优秀。谢谢。
猜你喜欢
  • 2017-10-15
  • 1970-01-01
  • 2021-11-09
  • 2020-02-18
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多