#include <iostream>
#include <io.h>
#include <direct.h>
#include <string>
#include <vector>
#include <iomanip>
#include <ctime>
#include <fstream>
#include <locale>
using namespace std;
void getFiles( string, vector<wstring>& );
int main() {
vector<wstring> files;
getFiles( ".", files );
wfstream file;
file.open("name.txt",ofstream::out);
for (int j=0; j<files.size(); ++j) {
file<<files[j]<<endl;
}
file.close();
system("pause");
return 0;
}
void getFiles( string path, vector<wstring>& files ) {
long hFile = 0;
struct _wfinddata_t fileinfo;
string p;
if ((hFile = _wfindfirst(L"*",&fileinfo)) != -1) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) {
if (wcscmp(fileinfo.name,L".") != 0 && wcscmp(fileinfo.name,L"..") != 0) {
files.push_back(fileinfo.name );
wcout<<fileinfo.name<<endl;
}
}
} while (_wfindnext( hFile, &fileinfo ) == 0);
_findclose(hFile);
}
}
我想通过一个程序按照自己定的规则修改文件名,但是如果文件名有特殊字符我就不知道该怎么修改了,上面是我测试用的获取文件名代码,平台是VS2012,项目字符集Unicode和多字节字符集都已试过。
当文件名含有[爱心][音符](好吧CSDN居然不让打出来,实在不行看这里 http://zhidao.baidu.com/question/518004974.html )等特殊字符时,
比如说有3个文件夹:123、[爱心]12、哈哈123
我这个代码就会输出:123、哈哈123
之前没用宽字符的时候输出的是:123、?12、哈哈123
我刚用C++没多久,求大神们解救,谢谢!
3 个解决方案
#1
代碼好像沒什麽問題,
#2
wcout<<fileinfo.name<<endl;
本地一般是gbk编码,wcout输出时,会将unicode编码的字符转换为gbk编码,[爱心]这个字符在gbk中无对应字符,所以不能成功转换。
http://zhidao.baidu.com/question/518004974.html Bk0X 说了一种方法,就是将unicode以二进制保存到文件中,并用记事本打开。
本地一般是gbk编码,wcout输出时,会将unicode编码的字符转换为gbk编码,[爱心]这个字符在gbk中无对应字符,所以不能成功转换。
http://zhidao.baidu.com/question/518004974.html Bk0X 说了一种方法,就是将unicode以二进制保存到文件中,并用记事本打开。
#3
求解楼主,vs2012在哪里设置字符集呀? 和vs2010不一样呀!
#1
代碼好像沒什麽問題,
#2
wcout<<fileinfo.name<<endl;
本地一般是gbk编码,wcout输出时,会将unicode编码的字符转换为gbk编码,[爱心]这个字符在gbk中无对应字符,所以不能成功转换。
http://zhidao.baidu.com/question/518004974.html Bk0X 说了一种方法,就是将unicode以二进制保存到文件中,并用记事本打开。
本地一般是gbk编码,wcout输出时,会将unicode编码的字符转换为gbk编码,[爱心]这个字符在gbk中无对应字符,所以不能成功转换。
http://zhidao.baidu.com/question/518004974.html Bk0X 说了一种方法,就是将unicode以二进制保存到文件中,并用记事本打开。
#3
求解楼主,vs2012在哪里设置字符集呀? 和vs2010不一样呀!