//
global.h
// ========================================================================= //
// 功 能:获取当前应用程序的路径目录 //
// 参 数:无 //
// 返回值:当前应用程序的路径目录 //
// 备 注:无 //
// ========================================================================= //
CString GetCurrentPath();
// ========================================================================= //
// 功 能:检查给定目录是否存在,如果不存在则创建该目录 //
// 参 数:sDirectory,给定路径 //
// 返回值:无 //
// 备 注:无 //
// ========================================================================= //
void CheckDirectory(CString sDirectory);
// ========================================================================= //
// 功 能:返回错误信息 //
// 参 数:Error,错误码 //
// 返回值:错误信息 //
// 备 注:无 //
// ========================================================================= //
CString FormartLastError(DWORD Error);
// ========================================================================= //
// 功 能:检查目录是否存在,不存在则创建此路径,C:a //
// 参 数:lpszDirectory,目录路径 //
// 返回值:TRUE,FALSE //
// 备 注:无 //
// ========================================================================= //
BOOL CheckDirectory(LPCTSTR lpszDirectory);
// ========================================================================= //
// 功 能:创建UNICODE格式的文件,以0xfeff开头 //
// 参 数:strPathFile,文件路径 //
// 返回值:HANDLE,文件句柄 //
// 备 注:无 //
// ========================================================================= //
HANDLE CreateUnicodeFile(CStringW strPathFile);
// ========================================================================= //
// 功 能:写UNICODE格式的日志文件,存放与当前应用程序路径下的log文件夹 //
// 下文件名为:log_年-月-日.txt //
// 参 数:sLogMsg,日志信息 //
// 返回值:TRUE,FALSE //
// 备 注:无 //
// ========================================================================= //
BOOL WriteLogFile(CStringW sLogMsg);
// global.cpp
#include " global.h "
CString GetCurrentPath()
... {
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定义了吧,好象是
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
CString sPath;
sPath=exeFullPath;
int nPos;
nPos=sPath.ReverseFind ('/');
sPath=sPath.Left (nPos+1);
return sPath;
}
void CheckDirectory(CString sDirectory)
... {
//检查目录是否存在
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile(sDirectory, &fd);
if (!((hFind != INVALID_HANDLE_VALUE) && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)))
...{
::CreateDirectory(sDirectory,NULL);
}
FindClose(hFind);
}
CString FormartLastError(DWORD Error)
... {
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(TCHAR *) &lpMsgBuf,
0,
NULL
);
TCHAR *p=(TCHAR*)lpMsgBuf;
CString str=p;
LocalFree( lpMsgBuf );
return str;
}
BOOL CheckDirectory(LPCTSTR lpszDirectory)
... {
//检查目录是否存在
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile(lpszDirectory, &fd);
if (!((hFind != INVALID_HANDLE_VALUE) && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)))
...{
::CreateDirectory(lpszDirectory,NULL);
}
FindClose(hFind);
return TRUE;
}
HANDLE CreateUnicodeFile(CStringW strPathFile)
... {
HANDLE hFile=NULL;
//创建文件
hFile=CreateFile(strPathFile,
GENERIC_WRITE|GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(INVALID_HANDLE_VALUE==hFile)
...{
AfxMessageBox(FormartLastError(GetLastError()));
return NULL;
}
DWORD dwValue=0;
DWORD dwSize=0;
dwSize = GetFileSize (hFile, NULL) ;
if (dwSize == 0xFFFFFFFF)
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return NULL;
}
if(dwSize==0)
...{
TCHAR p=0xfeff;//UNICODE文件开头标志
if(!WriteFile(hFile,&p,sizeof(TCHAR),&dwValue,NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return NULL;
}
}
return hFile;
}
BOOL WriteLogFile(CStringW sLogMsg)
... {
CStringW sFileName;
if(sFileName.IsEmpty())
...{
sFileName=GetCurrentPath();//获取应用程序所在目录
sFileName=sFileName+TEXT("log/");//创建log文件夹
CheckDirectory(sFileName);
CString sdate;
CTime tt=CTime::GetTickCount();
CString strtt=tt.Format("log_%Y-%m-%d.txt");
sFileName=sFileName+strtt;
}
HANDLE hFile=CreateUnicodeFile(sFileName);//创建UNICODE格式文件
if(NULL==hFile)
...{
AfxMessageBox(FormartLastError(GetLastError()));
return FALSE;
}
DWORD dwValue=0;
DWORD dwSize=0;
dwSize = GetFileSize (hFile, NULL) ;
if (dwSize == 0xFFFFFFFF)
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
long logcount=0;
int iLength=0;
DWORD ftype=GetFileType(hFile);
if(ftype!=FILE_TYPE_DISK)//检测文件是否为磁盘文件
return FALSE;
TCHAR buff[10];
wmemset((WCHAR*)buff,L'0',10);
if(dwSize!=2)//如果已经写日志
...{
//移动至文件开头sizeof(TCHAR)处
DWORD p=SetFilePointer(hFile,sizeof(TCHAR),NULL,FILE_CURRENT);
if(p==0xFFFFFFFF)
return FALSE;
//读取日志记录数 00000000
if(!ReadFile(hFile,buff,10*sizeof(TCHAR),&dwValue,NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
logcount=wcstol((WCHAR*)buff,NULL,10);
}
CStringW sCount;
logcount=logcount+1;
sCount.Format(TEXT("%d"),logcount);
for(int i=0;i<sCount.GetLength();i++)
buff[8-sCount.GetLength()+i]=sCount[i];
buff[8]=' ';
buff[9]=' ';
SetFilePointer(hFile,sizeof(TCHAR),NULL,FILE_BEGIN);//移动至文件开头2
//写日志记录数
if(!WriteFile(hFile,buff,(int)10*sizeof(TCHAR),&dwValue,NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
SetFilePointer(hFile,NULL,NULL,FILE_END);//移动至文件尾部
CTime t=CTime::GetTickCount();
CStringW sMsg=t.Format("[%Y-%m-%d %H:%M:%S] ");
sLogMsg=sMsg+sLogMsg+TEXT(" ");
iLength = sLogMsg.GetLength();
//写日志
if(!WriteFile(hFile,sLogMsg.GetBuffer(),(int)iLength*sizeof(TCHAR), &dwValue, NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
//关闭文件
CloseHandle(hFile);
return TRUE;
}
// IniFileReadWrite.h
#pragma once
// ini文件读写类
class IniFileReadWrite
... {
public:
//写ini文件,默认文件在当前程序运行目录下,文件名为set.ini
BOOL WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,LPCTSTR lpszValue);
BOOL WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,int iValue);
BOOL WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,double dValue);
//读ini文件,默认文件在当前程序运行目录下,文件名为set.ini
BOOL ReadValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,CString &szValue);
BOOL ReadValue(CString lpszSection,LPCTSTR lpszSectionKey,int &iValue);
BOOL ReadValue(CString lpszSection,LPCTSTR lpszSectionKey,double &dValue);
//更改文件路径
void SetPathFileName(LPCTSTR lpszPathFileName);
//构造函数
IniFileReadWrite(LPCTSTR lpszPathFileName);
IniFileReadWrite(void);
~IniFileReadWrite(void);
private:
//文件路径及文件
CString m_sPathFileName;
} ;
// IniFileReadWrite.cpp
#include " stdafx.h "
#include " global.h "
#include " IniFileReadWrite.h "
BOOL IniFileReadWrite::WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,LPCTSTR lpszValue)
... {
return WritePrivateProfileString(lpszSection,lpszSectionKey,lpszValue,m_sPathFileName);
}
BOOL IniFileReadWrite::WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey, int iValue)
... {
CString sValue;
sValue.Format(L"%d",iValue);
return WriteValue(lpszSection,lpszSectionKey,sValue);
}
BOOL IniFileReadWrite::WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey, double dValue)
... {
CString sValue;
sValue.Format(L"%0.2f",dValue);
return WriteValue(lpszSection,lpszSectionKey,sValue);
}
BOOL IniFileReadWrite::ReadValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,CString & szValue)
... {
WCHAR buff[1024];
DWORD dwRead=GetPrivateProfileString(lpszSection,lpszSectionKey,NULL,buff,1024,m_sPathFileName);
if(dwRead==0)
return FALSE;
szValue=buff;
return TRUE;
}
BOOL IniFileReadWrite::ReadValue(CString lpszSection,LPCTSTR lpszSectionKey, int & iValue)
... {
WCHAR buff[1024];
DWORD dwRead=GetPrivateProfileString(lpszSection,lpszSectionKey,NULL,(LPWSTR)buff,1024,m_sPathFileName);
if(dwRead==0)
return FALSE;
int value=_wtoi(buff);
iValue=value;
return TRUE;
}
BOOL IniFileReadWrite::ReadValue(CString lpszSection,LPCTSTR lpszSectionKey, double & dValue)
... {
WCHAR buff[1024];
DWORD dwRead=GetPrivateProfileString(lpszSection,lpszSectionKey,NULL,(LPWSTR)buff,1024,m_sPathFileName);
if(dwRead==0)
return FALSE;
double value=atof((char*)buff);
dValue=value;
return TRUE;
}
// 更改文件路径 C:a .
void IniFileReadWrite::SetPathFileName(LPCTSTR lpszPathFileName)
... {
CheckDirectory(lpszPathFileName);
m_sPathFileName=lpszPathFileName;
}
IniFileReadWrite::IniFileReadWrite(LPCTSTR lpszPathFileName)
... {
m_sPathFileName=lpszPathFileName;
CFileFind ff;
if(!ff.FindFile(m_sPathFileName))
CreateUnicodeFile(m_sPathFileName);//创建Unicode格式文件
}
IniFileReadWrite::IniFileReadWrite( void )
... {
//获取当前应用程序的路径
CStringW strPath=GetCurrentPath();
//文件路径
strPath=strPath+_T("set.ini");
CFileFind ff;
if(!ff.FindFile(strPath))
CreateUnicodeFile(strPath);//创建Unicode格式文件
m_sPathFileName=strPath;
}
IniFileReadWrite:: ~ IniFileReadWrite( void )
... {
}
// ========================================================================= //
// 功 能:获取当前应用程序的路径目录 //
// 参 数:无 //
// 返回值:当前应用程序的路径目录 //
// 备 注:无 //
// ========================================================================= //
CString GetCurrentPath();
// ========================================================================= //
// 功 能:检查给定目录是否存在,如果不存在则创建该目录 //
// 参 数:sDirectory,给定路径 //
// 返回值:无 //
// 备 注:无 //
// ========================================================================= //
void CheckDirectory(CString sDirectory);
// ========================================================================= //
// 功 能:返回错误信息 //
// 参 数:Error,错误码 //
// 返回值:错误信息 //
// 备 注:无 //
// ========================================================================= //
CString FormartLastError(DWORD Error);
// ========================================================================= //
// 功 能:检查目录是否存在,不存在则创建此路径,C:a //
// 参 数:lpszDirectory,目录路径 //
// 返回值:TRUE,FALSE //
// 备 注:无 //
// ========================================================================= //
BOOL CheckDirectory(LPCTSTR lpszDirectory);
// ========================================================================= //
// 功 能:创建UNICODE格式的文件,以0xfeff开头 //
// 参 数:strPathFile,文件路径 //
// 返回值:HANDLE,文件句柄 //
// 备 注:无 //
// ========================================================================= //
HANDLE CreateUnicodeFile(CStringW strPathFile);
// ========================================================================= //
// 功 能:写UNICODE格式的日志文件,存放与当前应用程序路径下的log文件夹 //
// 下文件名为:log_年-月-日.txt //
// 参 数:sLogMsg,日志信息 //
// 返回值:TRUE,FALSE //
// 备 注:无 //
// ========================================================================= //
BOOL WriteLogFile(CStringW sLogMsg);
// global.cpp
#include " global.h "
CString GetCurrentPath()
... {
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定义了吧,好象是
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
CString sPath;
sPath=exeFullPath;
int nPos;
nPos=sPath.ReverseFind ('/');
sPath=sPath.Left (nPos+1);
return sPath;
}
void CheckDirectory(CString sDirectory)
... {
//检查目录是否存在
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile(sDirectory, &fd);
if (!((hFind != INVALID_HANDLE_VALUE) && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)))
...{
::CreateDirectory(sDirectory,NULL);
}
FindClose(hFind);
}
CString FormartLastError(DWORD Error)
... {
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(TCHAR *) &lpMsgBuf,
0,
NULL
);
TCHAR *p=(TCHAR*)lpMsgBuf;
CString str=p;
LocalFree( lpMsgBuf );
return str;
}
BOOL CheckDirectory(LPCTSTR lpszDirectory)
... {
//检查目录是否存在
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile(lpszDirectory, &fd);
if (!((hFind != INVALID_HANDLE_VALUE) && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)))
...{
::CreateDirectory(lpszDirectory,NULL);
}
FindClose(hFind);
return TRUE;
}
HANDLE CreateUnicodeFile(CStringW strPathFile)
... {
HANDLE hFile=NULL;
//创建文件
hFile=CreateFile(strPathFile,
GENERIC_WRITE|GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(INVALID_HANDLE_VALUE==hFile)
...{
AfxMessageBox(FormartLastError(GetLastError()));
return NULL;
}
DWORD dwValue=0;
DWORD dwSize=0;
dwSize = GetFileSize (hFile, NULL) ;
if (dwSize == 0xFFFFFFFF)
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return NULL;
}
if(dwSize==0)
...{
TCHAR p=0xfeff;//UNICODE文件开头标志
if(!WriteFile(hFile,&p,sizeof(TCHAR),&dwValue,NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return NULL;
}
}
return hFile;
}
BOOL WriteLogFile(CStringW sLogMsg)
... {
CStringW sFileName;
if(sFileName.IsEmpty())
...{
sFileName=GetCurrentPath();//获取应用程序所在目录
sFileName=sFileName+TEXT("log/");//创建log文件夹
CheckDirectory(sFileName);
CString sdate;
CTime tt=CTime::GetTickCount();
CString strtt=tt.Format("log_%Y-%m-%d.txt");
sFileName=sFileName+strtt;
}
HANDLE hFile=CreateUnicodeFile(sFileName);//创建UNICODE格式文件
if(NULL==hFile)
...{
AfxMessageBox(FormartLastError(GetLastError()));
return FALSE;
}
DWORD dwValue=0;
DWORD dwSize=0;
dwSize = GetFileSize (hFile, NULL) ;
if (dwSize == 0xFFFFFFFF)
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
long logcount=0;
int iLength=0;
DWORD ftype=GetFileType(hFile);
if(ftype!=FILE_TYPE_DISK)//检测文件是否为磁盘文件
return FALSE;
TCHAR buff[10];
wmemset((WCHAR*)buff,L'0',10);
if(dwSize!=2)//如果已经写日志
...{
//移动至文件开头sizeof(TCHAR)处
DWORD p=SetFilePointer(hFile,sizeof(TCHAR),NULL,FILE_CURRENT);
if(p==0xFFFFFFFF)
return FALSE;
//读取日志记录数 00000000
if(!ReadFile(hFile,buff,10*sizeof(TCHAR),&dwValue,NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
logcount=wcstol((WCHAR*)buff,NULL,10);
}
CStringW sCount;
logcount=logcount+1;
sCount.Format(TEXT("%d"),logcount);
for(int i=0;i<sCount.GetLength();i++)
buff[8-sCount.GetLength()+i]=sCount[i];
buff[8]=' ';
buff[9]=' ';
SetFilePointer(hFile,sizeof(TCHAR),NULL,FILE_BEGIN);//移动至文件开头2
//写日志记录数
if(!WriteFile(hFile,buff,(int)10*sizeof(TCHAR),&dwValue,NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
SetFilePointer(hFile,NULL,NULL,FILE_END);//移动至文件尾部
CTime t=CTime::GetTickCount();
CStringW sMsg=t.Format("[%Y-%m-%d %H:%M:%S] ");
sLogMsg=sMsg+sLogMsg+TEXT(" ");
iLength = sLogMsg.GetLength();
//写日志
if(!WriteFile(hFile,sLogMsg.GetBuffer(),(int)iLength*sizeof(TCHAR), &dwValue, NULL))
...{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
//关闭文件
CloseHandle(hFile);
return TRUE;
}
// IniFileReadWrite.h
#pragma once
// ini文件读写类
class IniFileReadWrite
... {
public:
//写ini文件,默认文件在当前程序运行目录下,文件名为set.ini
BOOL WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,LPCTSTR lpszValue);
BOOL WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,int iValue);
BOOL WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,double dValue);
//读ini文件,默认文件在当前程序运行目录下,文件名为set.ini
BOOL ReadValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,CString &szValue);
BOOL ReadValue(CString lpszSection,LPCTSTR lpszSectionKey,int &iValue);
BOOL ReadValue(CString lpszSection,LPCTSTR lpszSectionKey,double &dValue);
//更改文件路径
void SetPathFileName(LPCTSTR lpszPathFileName);
//构造函数
IniFileReadWrite(LPCTSTR lpszPathFileName);
IniFileReadWrite(void);
~IniFileReadWrite(void);
private:
//文件路径及文件
CString m_sPathFileName;
} ;
// IniFileReadWrite.cpp
#include " stdafx.h "
#include " global.h "
#include " IniFileReadWrite.h "
BOOL IniFileReadWrite::WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,LPCTSTR lpszValue)
... {
return WritePrivateProfileString(lpszSection,lpszSectionKey,lpszValue,m_sPathFileName);
}
BOOL IniFileReadWrite::WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey, int iValue)
... {
CString sValue;
sValue.Format(L"%d",iValue);
return WriteValue(lpszSection,lpszSectionKey,sValue);
}
BOOL IniFileReadWrite::WriteValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey, double dValue)
... {
CString sValue;
sValue.Format(L"%0.2f",dValue);
return WriteValue(lpszSection,lpszSectionKey,sValue);
}
BOOL IniFileReadWrite::ReadValue(LPCTSTR lpszSection,LPCTSTR lpszSectionKey,CString & szValue)
... {
WCHAR buff[1024];
DWORD dwRead=GetPrivateProfileString(lpszSection,lpszSectionKey,NULL,buff,1024,m_sPathFileName);
if(dwRead==0)
return FALSE;
szValue=buff;
return TRUE;
}
BOOL IniFileReadWrite::ReadValue(CString lpszSection,LPCTSTR lpszSectionKey, int & iValue)
... {
WCHAR buff[1024];
DWORD dwRead=GetPrivateProfileString(lpszSection,lpszSectionKey,NULL,(LPWSTR)buff,1024,m_sPathFileName);
if(dwRead==0)
return FALSE;
int value=_wtoi(buff);
iValue=value;
return TRUE;
}
BOOL IniFileReadWrite::ReadValue(CString lpszSection,LPCTSTR lpszSectionKey, double & dValue)
... {
WCHAR buff[1024];
DWORD dwRead=GetPrivateProfileString(lpszSection,lpszSectionKey,NULL,(LPWSTR)buff,1024,m_sPathFileName);
if(dwRead==0)
return FALSE;
double value=atof((char*)buff);
dValue=value;
return TRUE;
}
// 更改文件路径 C:a .
void IniFileReadWrite::SetPathFileName(LPCTSTR lpszPathFileName)
... {
CheckDirectory(lpszPathFileName);
m_sPathFileName=lpszPathFileName;
}
IniFileReadWrite::IniFileReadWrite(LPCTSTR lpszPathFileName)
... {
m_sPathFileName=lpszPathFileName;
CFileFind ff;
if(!ff.FindFile(m_sPathFileName))
CreateUnicodeFile(m_sPathFileName);//创建Unicode格式文件
}
IniFileReadWrite::IniFileReadWrite( void )
... {
//获取当前应用程序的路径
CStringW strPath=GetCurrentPath();
//文件路径
strPath=strPath+_T("set.ini");
CFileFind ff;
if(!ff.FindFile(strPath))
CreateUnicodeFile(strPath);//创建Unicode格式文件
m_sPathFileName=strPath;
}
IniFileReadWrite:: ~ IniFileReadWrite( void )
... {
}