// Changing Environment Variables
CuEnvironmentString envString( szPath );
string strPath(envString);
// CuEnvironmentString.h
class CuEnvironmentString
{
string m_strString;
public:
CuEnvironmentString(void);
CuEnvironmentString(string str);
~CuEnvironmentString(void);
public:
void OnDo( string &str );
operator string() const;
private:
BOOL HaveEnvironmentVariable( string &str );
string GetEnvironmentVariable( string &str );
string ExplodeEnironmentVariable( string &str, size_t ops = 0 );
string SubStrToIndexChar( string &str, char ch, size_t pos = 0 );
};
// CuEnvironmentString.cpp
CuEnvironmentString::CuEnvironmentString(void)
{
}
CuEnvironmentString::~CuEnvironmentString(void)
{
}
CuEnvironmentString::CuEnvironmentString(string str)
{
OnDo(str);
}
void CuEnvironmentString::OnDo( string &str )
{
m_strString.clear();
if( !HaveEnvironmentVariable(str) )
{
m_strString = str;
return;
}
size_t pos = 0;
string strNotEnv;
string strEnv;
do
{
strNotEnv = SubStrToIndexChar( str, '%', pos);
m_strString += strNotEnv;
pos += strNotEnv.size() + 1;
strEnv = SubStrToIndexChar( str, '%', pos);
m_strString += this->GetEnvironmentVariable(strEnv);
pos += strEnv.size() + 1;
} while ( pos < str.size() );
}
string CuEnvironmentString::SubStrToIndexChar( string &str, char ch, size_t pos/* = 0 */)
{
string strResult;
if( pos > str.size() )
return strResult;
size_t found = str.find( '%' , pos);
strResult = str.substr( pos, found - pos );
return strResult;
}
string CuEnvironmentString::GetEnvironmentVariable( string &str )
{
TCHAR newEnv[MAX_PATH +1];
DWORD res = ::GetEnvironmentVariable( str.c_str(), newEnv, MAX_PATH );
string strResult;
if( res != 0 )
strResult = newEnv;
return strResult;
}
string CuEnvironmentString::ExplodeEnironmentVariable( string &str, size_t ops /* = 0*/ )
{
size_t found_first = str.find( '%' , ops );
size_t found_second = str.find( '%' , found_first + 1);
string strResult;
if( found_first != string::npos && found_second != string::npos )
strResult = str.substr (found_first + 1, found_second - 1);
return strResult;
}
BOOL CuEnvironmentString::HaveEnvironmentVariable( string &str )
{
string strResult = ExplodeEnironmentVariable(str);
return (!strResult.empty());
}
CuEnvironmentString::operator string() const
{ return string(m_strString.begin(), m_strString.end()); }
2009年12月18日 星期五
CuEnvironmentString - Changing Environment Variables
訂閱:
張貼留言 (Atom)
為了一個環境變數轉換要搞一個類別, 這個工作合算嗎??
回覆刪除