#ifndef SAFE_FREE
#define SAFE_FREE(p) if(p) { free(p); p = NULL; }
#endif
#ifdef __cplusplus
extern "C" {
#endif
int GetFileSize(const char* szFileName, unsigned long* pulFileSize);
int ReadDataFromFile(const char* szFileName, unsigned char* pbData, unsigned long ulDataSize);
char* ReadAllDataFromFile(const char* szFileName);
char* ReadAllDataFromFileEx(const char* szFileName, int flag_sz);
int WriteDataToFile(const char* szFileName, const unsigned char* pbData, unsigned long ulDataSize);
#ifdef __cplusplus
}
#endif
*/
//------------------------------------------------------------------------
// GetFileSize()
// - 获取文件的长度
// szFileName - 文件名
// pulFileSize - 返回的文件的长度(单位:字节)
//------------------------------------------------------------------------
int GetFileSize(const char* szFileName, unsigned long* pulFileSize)
{
FILE *fp = fopen(szFileName, "rb");
if ( fp )
{
fseek(fp, 0, SEEK_END);
*pulFileSize = ftell(fp);
fclose(fp);
return 0;
}
return -1;
}
//------------------------------------------------------------------------
// ReadDataFromFile()
// - 获取文件中指定长度的数据内容
// szFileName - 文件名
// pbData - 返回的数据内容
// ulDataSize - 数据的长度(单位:字节)
//------------------------------------------------------------------------
int ReadDataFromFile(const char* szFileName, unsigned char* pbData, unsigned long ulDataSize)
{
unsigned long ulReadedSize = 0;
FILE *fp = fopen(szFileName, "rb");
if ( fp )
{
ulReadedSize = (unsigned long)fread(pbData, 1, ulDataSize, fp);
fclose(fp);
return ( ulReadedSize == ulDataSize ) ? 0 : -1;
}
return -1;
}
//------------------------------------------------------------------------
// ReadAllDataFromFile()
// - 获取文件中所有内容
// szFileName - 文件名
//------------------------------------------------------------------------
char* ReadAllDataFromFile(const char* szFileName)
{
unsigned long ulFileSize = 0;
if ( 0 == GetFileSize(szFileName, &ulFileSize) )
{
char* pbBuffer = (char*)malloc(ulFileSize);
if ( 0 == ReadDataFromFile(szFileName, (unsigned char*)pbBuffer, ulFileSize) )
{
return pbBuffer;
}
else
{
free(pbBuffer);
return NULL;
}
}
return NULL;
}
#define FLAG_SZ_END_WITH_ZERO 1
#define FLAG_SZ_END_WITHOUT_ZERO 0
//------------------------------------------------------------------------
// ReadAllDataFromFileEx()
// - 获取文件中所有内容,并且可选择是否以'/0'结尾
// szFileName - 文件名
// flag_sz - 是否以'/0'结尾。0:否;1:是
//------------------------------------------------------------------------
char* ReadAllDataFromFileEx(const char* szFileName, int flag_sz)
{
unsigned long ulFileSize = 0;
if ( 0 == GetFileSize(szFileName, &ulFileSize) )
{
char* pbBuffer = NULL;
if ( 1 == flag_sz )
{
pbBuffer = (char*)malloc(ulFileSize+1);
}
else
{
pbBuffer = (char*)malloc(ulFileSize);
}
if ( 0 == ReadDataFromFile(szFileName, (unsigned char*)pbBuffer, ulFileSize) )
{
if ( 1 == flag_sz )
{
pbBuffer[ulFileSize] = '/0';
}
return pbBuffer;
}
else
{
free(pbBuffer);
return NULL;
}
}
return NULL;
}
//------------------------------------------------------------------------
// WriteDataToFile()
// - 保存数据到文件
// szFileName - 文件名
// pbData - 要保存的数据
// ulDataSize - 数据的长度(单位:字节)
//------------------------------------------------------------------------
int WriteDataToFile(const char* szFileName, const unsigned char* pbData, unsigned long ulDataSize)
{
unsigned long ulWritedSize = 0;
FILE *fp = fopen(szFileName, "wb");
if ( fp )
{
ulWritedSize = (unsigned long)fwrite(pbData, 1, ulDataSize, fp);
fclose(fp);
return ( ulWritedSize == ulDataSize ) ? 0 : -1;
}
return -1;
}
if( OpenClipboard(NULL) )
{
EmptyClipboard();
hGlobal = GlobalAlloc(GHND, strText.GetLength()+1);
szBuf = (char*)GlobalLock(hGlobal);
strcpy(szBuf, LPCSTR(strText));
GlobalUnlock(hGlobal);
SetClipboardData(CF_TEXT, hGlobal);
CloseClipboard();
return S_OK;
}
return E_FAIL;
}
//------------------------------------------------------------------------
// GetTextFromClipbrd()
// - 获取剪贴板中的文本
// strText - 返回的文本内容
//------------------------------------------------------------------------
HRESULT GetTextFromClipbrd(CString& strText)
{
if ( OpenClipboard(NULL) )
{
HANDLE hData = GetClipboardData(CF_TEXT);
char* szBuf = (char*)GlobalLock(hData);
strText = szBuf;
GlobalUnlock(hData);
CloseClipboard();
return S_OK;
}
return E_FAIL;
}