【新手求助】如何获取当前目录下所有文件夹名和文件名(含特殊符号)

cploytale 2013-01-19 08:36:50
#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++没多久,求大神们解救,谢谢!
...全文
224 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bxk253387223 2013-11-14
  • 打赏
  • 举报
回复
求解楼主,vs2012在哪里设置字符集呀? 和vs2010不一样呀!
swordtan 2013-01-21
  • 打赏
  • 举报
回复
wcout<<fileinfo.name<<endl; 本地一般是gbk编码,wcout输出时,会将unicode编码的字符转换为gbk编码,[爱心]这个字符在gbk中无对应字符,所以不能成功转换。 http://zhidao.baidu.com/question/518004974.html Bk0X 说了一种方法,就是将unicode以二进制保存到文件中,并用记事本打开。
prajna 2013-01-20
  • 打赏
  • 举报
回复
代碼好像沒什麽問題,

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧