0

我正在尝试将 const std::filesystem::directory_entry (dirent) 转换为 tchar 但我不明白它是如何完成的。我尝试了很多方法。你能帮助我吗?

编辑:

 #include "pch.h"
    #include <memory>
    #include <filesystem>
    #include <algorithm>
    #include <iostream>
    #include <tchar.h>
    #include <string.h>
    typedef wchar_t WCHAR;
    namespace fs = std::filesystem;

    int main() try
    {
        std::for_each(fs::recursive_directory_iterator("./foo/"), {},
            [](fs::directory_entry const& dirent)
        {

                if (fs::is_regular_file(dirent) &&
                    dirent.path().filename() == "black.txt")
                {
                    std::wstring = path.wstring();
                }


        });
    }
    catch (fs::filesystem_error const& e)
    {
        std::cerr << "error: " << e.what() << '\n';
    }
4

1 回答 1

0

您可以使用以下函数转换std::filesystem::path为任何形式:

std::string string() const;
std::wstring wstring() const;
std::u16string u16string() const;
std::u32string u32string() const;

TCHAR正如评论中提到的那样,它有点像遗物,你最好使用上述任何一种替代方法。

如果您要将它传递给 Win32 API 函数,我会建议wstring显式使用,而根本不用担心变形TCHAR


你的代码应该是这样的:

if (fs::is_regular_file(dirent) &&
    dirent.path().filename() == "black.txt")
{    
    std::wstring path_as_string = path.wstring();
}

TCHAR,没有 C 风格的数组,没有 C 风格的内存复制。

于 2019-08-09T11:43:04.503 回答