把常見的編碼類型文件(ASCI、Unicode、utf-8)讀出到std::string中

 

  1. int VengConfig::GetFileType(LPCTSTR lpszFileName)   
  2. {  
  3.     CFile file;   
  4.     byte  buf[3]= {0}; 
  5.     int tc;   
  6.     try   
  7.     {   
  8.         if(file.Open(lpszFileName,CFile::modeRead|CFile::shareDenyNone|CFile::typeBinary))   
  9.         {      
  10.             file.Read(buf,3); 
  11.  
  12.             if(buf[0]==0xEF && buf[1]==0xBB && buf[2]==0xBF)   
  13.                 tc=0;   
  14.             else if(buf[0]==0xFF && buf[1]==0xFE )   
  15.                 tc=1 ;   
  16.             //else if(buf[0]==0xFE && buf[1]==0xFF )   
  17.             //    tc=sUNICODEBIGENDIAN;   
  18.             else   
  19.                 tc=3;   
  20.         }   
  21.         else   
  22.             tc=4;   
  23.     }   
  24.     catch (CFileException ex)   
  25.     {      
  26.         CString errormsg;   
  27.         errormsg.Format(_T("操作文件%s時發生異常!"),ex.m_strFileName);   
  28.         cout<<errormsg<<endl;   
  29.     }   
  30.  
  31.     return tc;   
  32.  
  33. string VengConfig::AllFileDataTypeConventToString(string filepath,int nType) 
  34.     string FileData; 
  35.     FileData.empty(); 
  36.  
  37.     switch (nType) 
  38.     { 
  39.     case (3): 
  40.         { 
  41.             ifstream btfile(filepath.c_str(),ios::in|ios::binary); 
  42.             char buf[1024] = {0}; 
  43.             ostringstream  osTempFileData; 
  44.             osTempFileData<<btfile.rdbuf(); 
  45.             FileData = osTempFileData.str(); 
  46.         } 
  47.         break
  48.     case 1: 
  49.         { 
  50.             FILE *pfile = NULL; 
  51.             errno_t erCode = fopen_s(&pfile,filepath.c_str(), "rb"); 
  52.  
  53.             fseek(pfile, 2, 0); 
  54.             wchar_t buf[1024]={0}; 
  55.             wstring line; 
  56.  
  57.             while (!feof(pfile)) 
  58.             {    
  59.                 fgetws(buf, 1024, pfile); 
  60.                 line += buf; 
  61.             } 
  62.             fclose(pfile); 
  63.  
  64.             DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,line.c_str(),-1,NULL,0,NULL,FALSE); 
  65.             PBYTE TmpBuf = new BYTE[dwNum]; 
  66.             WideCharToMultiByte (CP_OEMCP,NULL,line.c_str(),-1,(PCHAR)TmpBuf,dwNum,NULL,FALSE); 
  67.  
  68.             FileData = (PCHAR)TmpBuf; 
  69.             delete TmpBuf; 
  70.         } 
  71.         break
  72.     case  0: 
  73.         { 
  74.             wchar_t  buf[1024] = {0}; 
  75.             FILE *fp = NULL; 
  76.             wstring line; 
  77.             _wfopen_s(&fp,CString(filepath.c_str()),_T("rt+,ccs=UTF-8"));              
  78.             locale loc(""); 
  79.             wcout.imbue(loc); 
  80.  
  81.             while(!feof(fp)) 
  82.             { 
  83.                 fgetws(buf,1024,fp); 
  84.                 line += buf; 
  85.             } 
  86.  
  87.             fclose(fp); 
  88.             DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,line.c_str(),-1,NULL,0,NULL,FALSE); 
  89.             PBYTE TmpBuf = new BYTE[dwNum]; 
  90.  
  91.             WideCharToMultiByte (CP_OEMCP,NULL,line.c_str(),-1,(PCHAR)TmpBuf,dwNum,NULL,FALSE); 
  92.  
  93.             FileData = (PCHAR)TmpBuf; 
  94.             delete TmpBuf; 
  95.         } 
  96.         break
  97.     case  4: 
  98.         break
  99.     default
  100.         break
  101.     } 
  102.  
  103.     return FileData; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章