- CString转换为string
static string toString(CString cs);
string StringAbout::toString(CString cs)
{
#ifdef _UNICODE
//如果是unicode工程
USES_CONVERSION;
std::string str(W2A(cs));
return str;
#else
//如果是多字节工程
std::string str(cs.GetBuffer());
cs.ReleaseBuffer();
return str;
#endif // _UNICODE
}
- //string转换为CString
static CString toCString(string str) ;
CString StringAbout::toCString(string str)
{
#ifdef _UNICODE
//如果是unicode工程
USES_CONVERSION; CString s(str.c_str());
CString ans(str.c_str());
return ans;
#else
//如果是多字节工程
//string 转 CString
CString ans;
ans.Format("%s", str.c_str());
return ans;
#endif // _UNICODE
}
- //CString转换为char*
static char* toCharX(CString cs);
char* StringAbout::toCharX(CString cs)
{
const size_t strSize=(cs.GetLength()+1)*2;
char* pstr=new char[strSize];
size_t sz=0;
wcstombs_s(&sz,pstr,strSize,cs,_TRUNCATE);
return pstr;
}
- //修改文件类型,替换文件后缀
static CString ReplacePostFix(string path,string post);
CString StringAbout::ReplacePostFix(string path,string post)
{
int pos=path.find(".");
string preStr=path.substr(0,pos+1);
preStr+=post;
CString mres=StringAbout::toCString(preStr);
return mres;
}
- //修改文件名
static CString ChangeFileName(string path,string post);
CString StringAbout::ChangeFileName(string path,string post)
{
int pos=path.find(".");
string preStr=path.substr(0,pos);
preStr+=post;
path=path.substr(pos,path.length()-1);
preStr+=path;
CString mres=StringAbout::toCString(preStr);
return mres;
}
- //判断路径最后是否带有斜杆,如果没有斜杆加上
static CString IsWithLastDiagonalbar(CString cstr);
CString StringAbout::IsWithLastDiagonalbar(CString cstr)
{
string m_str=toString(cstr);
int pos=m_str.rfind("\\");
if (pos<m_str.length()-1)
{
m_str+="\\";
}
CString res;
res=toCString(m_str);
return res;
}
- //路径中的文件
static string MReplaceFile(string path,string filename);
string StringAbout::MReplaceFile(string path,string filename)
{
int pos=path.rfind("\\");
string preStr=path.substr(0,pos+1);
preStr+=filename;
//CString mres=StringAbout::toCString(preStr);
return preStr;
}
- //获得文件路径中的文件名
static string GetFileFromPathString(string path);
std::string StringAbout::GetFileFromPathString(string path)
{
int pos=path.rfind("\\");
string postStr=path.substr(pos+1,path.length()-pos);
return postStr;
}
源代码:
**.h
#pragma once
#include <string>
using namespace std;
class StringAbout
{
public:
StringAbout(void);
~StringAbout(void);
public:
//CString转换为string
static string toString(CString cs);
//string转换为CString
static CString toCString(string str);
//CString转换为char*
static char* toCharX(CString cs);
//CString转换位char*
static CString CharXToCStr(char* mch);
//string转换位char*
static string CharXToStr(char* mch);
//修改文件类型,替换文件后缀
static CString ReplacePostFix(string path, string post);
//修改文件名
static CString ChangeFileName(string path, string post);
//判断路径最后是否带有斜杆,如果没有斜杆加上
static CString IsWithLastDiagonalbar(CString cstr);
//路径中的文件
static string MReplaceFile(string path, string filename);
//获得文件路径中的文件名
static string GetFileFromPathString(string path);
static std::string WStringToString(const std::wstring &wstr);
static std::wstring String2WString(const std::string& s);
};
**.cpp
#include "StdAfx.h"
#include "StringAbout.h"
StringAbout::StringAbout(void)
{
}
StringAbout::~StringAbout(void)
{
}
string StringAbout::toString(CString cs)
{
#ifdef _UNICODE
//如果是unicode工程
USES_CONVERSION;
std::string str(W2A(cs));
return str;
#else
//如果是多字节工程
std::string str(cs.GetBuffer());
cs.ReleaseBuffer();
return str;
#endif // _UNICODE
}
//CString转换位char*
CString StringAbout::CharXToCStr(char* mch)
{
#ifdef _UNICODE
CString mcstr;
mcstr = (CString)mch;
return mcstr;
#else
CString mcstr;
mcstr = (CString)mch;
return mcstr;
#endif
}
//string转换位char*
string StringAbout::CharXToStr(char* mch)
{
#ifdef _UNICODE
string mcstr;
mcstr = (string)mch;
return mcstr;
#else
string mcstr;
mcstr = (string)mch;
return mcstr;
#endif
}
CString StringAbout::toCString(string str)
{
#ifdef _UNICODE
//如果是unicode工程
USES_CONVERSION; CString s(str.c_str());
CString ans(str.c_str());
return ans;
#else
//如果是多字节工程
//string 转 CString
CString ans;
ans.Format("%s", str.c_str());
return ans;
#endif // _UNICODE
}
CString StringAbout::ChangeFileName(string path, string post)
{
int pos = path.find(".");
string preStr = path.substr(0, pos);
preStr += post;
path = path.substr(pos, path.length() - 1);
preStr += path;
CString mres = StringAbout::toCString(preStr);
return mres;
}
CString StringAbout::ReplacePostFix(string path, string post)
{
int pos = path.find(".");
string preStr = path.substr(0, pos + 1);
preStr += post;
CString mres = StringAbout::toCString(preStr);
return mres;
}
std::string StringAbout::GetFileFromPathString(string path)
{
int pos = path.rfind("\\");
string postStr = path.substr(pos, path.length() - pos);
return postStr;
}
string StringAbout::MReplaceFile(string path, string filename)
{
int pos = path.rfind("\\");
string preStr = path.substr(0, pos + 1);
preStr += filename;
//CString mres=StringAbout::toCString(preStr);
return preStr;
}
char* StringAbout::toCharX(CString cs)
{
const size_t strSize = (cs.GetLength() + 1) * 2;
char* pstr = new char[strSize];
size_t sz = 0;
wcstombs_s(&sz, pstr, strSize, cs, _TRUNCATE);
return pstr;
}
CString StringAbout::IsWithLastDiagonalbar(CString cstr)
{
string m_str = toString(cstr);
int pos = m_str.rfind("\\");
if (pos<m_str.length() - 1)
{
m_str += "\\";
}
CString res;
res = toCString(m_str);
return res;
}
std::string StringAbout::WStringToString(const std::wstring &wstr)
{
std::string str;
int nLen = (int)wstr.length();
str.resize(nLen, ' ');
int nResult = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wstr.c_str(), nLen, (LPSTR)str.c_str(), nLen, NULL, NULL);
if (nResult == 0)
{
return "";
}
return str;
}
std::wstring StringAbout::String2WString(const std::string& s)
{
std::string strLocale = setlocale(LC_ALL, "");
const char* chSrc = s.c_str();
size_t nDestSize = mbstowcs(NULL, chSrc, 0) + 1;
wchar_t* wchDest = new wchar_t[nDestSize];
wmemset(wchDest, 0, nDestSize);
mbstowcs(wchDest, chSrc, nDestSize);
std::wstring wstrResult = wchDest;
delete[]wchDest;
setlocale(LC_ALL, strLocale.c_str());
return wstrResult;
}