C++;Boost::filesystem::带有unicode字符的路径 我是C++新手,需要点帮助。我有三个文件夹,一个是英文的,一个是日文的,还有一个是俄文的,用于考试。当我运行这个小程序时 #include <windows.h> #include <string> #include <iostream> #include <boost/filesystem.hpp> #include <boost/locale.hpp> using namespace boost::filesystem; using namespace std; void iterateDirs(const path &dir_path, vector<path> &dir) { if ( exists( dir_path ) ) { directory_iterator end_itr; for ( directory_iterator itr(dir_path); itr != end_itr; ++itr ) { if ( is_directory(itr->status()) ) { cout << *itr << endl; dir.push_back(itr->path()); cout << dir.size() << endl; } } } } int main() { vector<path> dirs; iterateDirs("D:/Test", dirs); for (path p : dirs) { cout << p << endl; } return 0; }
这似乎不是唯一的cout问题,因为当我尝试使用向量项执行任何操作(例如使用winapi在资源管理器中打开这些文件夹)时,程序代码只能识别英文命名的文件夹 我在这个网站和谷歌上搜索过解决方案,但都没有成功。尝试使用wcout wstring wchar\t等没有任何效果 在windows 8上使用带有gcc和clion/cmake的mingw w64 4.0。C++;Boost::filesystem::带有unicode字符的路径 我是C++新手,需要点帮助。我有三个文件夹,一个是英文的,一个是日文的,还有一个是俄文的,用于考试。当我运行这个小程序时 #include <windows.h> #include <string> #include <iostream> #include <boost/filesystem.hpp> #include <boost/locale.hpp> using namespace boost::filesystem; using namespace std; void iterateDirs(const path &dir_path, vector<path> &dir) { if ( exists( dir_path ) ) { directory_iterator end_itr; for ( directory_iterator itr(dir_path); itr != end_itr; ++itr ) { if ( is_directory(itr->status()) ) { cout << *itr << endl; dir.push_back(itr->path()); cout << dir.size() << endl; } } } } int main() { vector<path> dirs; iterateDirs("D:/Test", dirs); for (path p : dirs) { cout << p << endl; } return 0; },c++,boost,boost-filesystem,C++,Boost,Boost Filesystem,这似乎不是唯一的cout问题,因为当我尝试使用向量项执行任何操作(例如使用winapi在资源管理器中打开这些文件夹)时,程序代码只能识别英文命名的文件夹 我在这个网站和谷歌上搜索过解决方案,但都没有成功。尝试使用wcout wstring wchar\t等没有任何效果 在windows 8上使用带有gcc和clion/cmake的mingw w64 4.0。 谢谢 不幸的是,将unicode输出到windows控制台并不容易。最可靠的方法是使用_cputws或WriteConsoleW,但这些函
谢谢 不幸的是,将unicode输出到windows控制台并不容易。最可靠的方法是使用_cputws或WriteConsoleW,但这些函数直接写入控制台,而流重定向无法使用它们。该计划:
#include <windows.h>
#include <string>
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/locale.hpp>
using namespace boost::filesystem;
using namespace std;
void iterateDirs(const path &dir_path, vector<path> &dir)
{
if ( exists( dir_path ) )
{
directory_iterator end_itr;
for ( directory_iterator itr(dir_path); itr != end_itr; ++itr ) {
if ( is_directory(itr->status()) ) {
_cputws(itr->path().wstring().c_str());
_cputws(L"\n");
dir.push_back(itr->path());
cout << dir.size() << endl;
}
}
}
}
int main() {
vector<path> dirs;
iterateDirs(".", dirs);
for (path p : dirs) {
_cputws(p.wstring().c_str());
_cputws(L"\n");
}
return 0;
}
和cmd中的下一个输出
因此,在运行应用程序之前,您需要确保可以看到目录名,例如使用dir
#include <windows.h>
#include <string>
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/locale.hpp>
using namespace boost::filesystem;
using namespace std;
void iterateDirs(const path &dir_path, vector<path> &dir)
{
if ( exists( dir_path ) )
{
directory_iterator end_itr;
for ( directory_iterator itr(dir_path); itr != end_itr; ++itr ) {
if ( is_directory(itr->status()) ) {
_cputws(itr->path().wstring().c_str());
_cputws(L"\n");
dir.push_back(itr->path());
cout << dir.size() << endl;
}
}
}
}
int main() {
vector<path> dirs;
iterateDirs(".", dirs);
for (path p : dirs) {
_cputws(p.wstring().c_str());
_cputws(L"\n");
}
return 0;
}
C:\w\1>test
.\CMakeFiles
1
.\??????????????
2
.\CMakeFiles
.\??????????????
C:\w\1>test
.\CMakeFiles
1
.\اختبارテスト試験Про
2
.\CMakeFiles
.\اختبارテスト試験Про