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

时间:2022-05-04 14:35:09
#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以二进制保存到文件中,并用记事本打开。

#3


求解楼主,vs2012在哪里设置字符集呀? 和vs2010不一样呀!

#1


代碼好像沒什麽問題,

#2


wcout<<fileinfo.name<<endl;

本地一般是gbk编码,wcout输出时,会将unicode编码的字符转换为gbk编码,[爱心]这个字符在gbk中无对应字符,所以不能成功转换。

http://zhidao.baidu.com/question/518004974.html  Bk0X 说了一种方法,就是将unicode以二进制保存到文件中,并用记事本打开。

#3


求解楼主,vs2012在哪里设置字符集呀? 和vs2010不一样呀!