?? dcfile.cpp
字號:
delete pTempBuffer;
return true;
}
/**--------------------------------------------------------------
* @param lBufferLen : 追加空塊的長度
* @return true : 成功,false : 失敗
* @description 加入空塊到文件尾
*---------------------------------------------------------------*/
bool DCFile::AppendFileBlock(long lBufferLen)
{
if ((!m_bOpenFlag) || (lBufferLen <= 0))
return false;
long lTempLength;
if (m_lMaxTempLength >= lBufferLen)
lTempLength = lBufferLen;
else
lTempLength = m_lMaxTempLength;
long lCounter = lBufferLen;
char *pTempBuffer = new char[lTempLength];
memset(pTempBuffer,0,lTempLength);
SeekToEnd();
while (lCounter > 0)
{
if (lCounter > lTempLength)
{
WriteFile((void*)pTempBuffer, lTempLength);
lCounter -= lTempLength;
}
else
{
WriteFile((void*)pTempBuffer, lCounter);
lCounter = 0;
}
}
delete pTempBuffer;
return true;
}
/**--------------------------------------------------------------
* @param lOffset : 覆蓋位置的偏移
* @param pBuffer : 緩沖區指針
* @param lBufferLen : 緩沖區長度
* @return true : 成功,false : 失敗
* @description 在文件某偏移處覆蓋一塊
*---------------------------------------------------------------*/
bool DCFile::CoverFileBlock(long lOffset,void *pBuffer, long lBufferLen)
{
if ((!m_bOpenFlag)||(!pBuffer))
return false;
long lFileLen = GetFileLength();
if ((lFileLen < (lOffset + lBufferLen)) || (lBufferLen <= 0))
return false;
Lseek(lOffset,DC_SEEK_SET);
WriteFile(pBuffer,lBufferLen);
return true;
}
/**--------------------------------------------------------------
* @param cCode : 填充碼
* @param lOffset : 填充位置的偏移
* @param lLength : 填充長度
* @return true : 成功,false : 失敗
* @description 填充文件的一塊
*---------------------------------------------------------------*/
bool DCFile::FileFillBlock(char cCode,long lOffset,long lLength)
{
if (!m_bOpenFlag)
return false;
long lFileLen = GetFileLength();
if ((lFileLen < (lOffset + lLength)) || (lLength <= 0))
return false;
long lTempLength;
if (m_lMaxTempLength >= lLength)
lTempLength = lLength;
else
lTempLength = m_lMaxTempLength;
long lCounter = lLength;
char *pTempBuffer = new char[lTempLength];
memset(pTempBuffer,cCode,lTempLength);
Lseek(lOffset,DC_SEEK_SET);
while (lCounter > 0)
{
if (lCounter > lTempLength)
{
WriteFile((void*)pTempBuffer,lTempLength);
lCounter -= lTempLength;
}
else
{
WriteFile((void*)pTempBuffer,lCounter);
lCounter = 0;
}
}
delete pTempBuffer;
return true;
}
/**--------------------------------------------------------------
* @param cCode : 填充碼
* @param lLength : 填充長度
* @return true : 成功,false : 失敗
* @description 加入空塊到文件尾并填充
*---------------------------------------------------------------*/
bool DCFile::AppendFillBlock(char cCode, long lLength)
{
if ((!m_bOpenFlag) || (lLength <= 0))
return false;
long lTempLength;
if (m_lMaxTempLength >= lLength)
lTempLength = lLength;
else
lTempLength = m_lMaxTempLength;
long lCounter = lLength;
char *pTempBuffer = new char[lTempLength];
memset(pTempBuffer,cCode,lTempLength);
SeekToEnd();
while (lCounter > 0)
{
if (lCounter > lTempLength)
{
WriteFile((void*)pTempBuffer, lTempLength);
lCounter -= lTempLength;
}
else
{
WriteFile((void*)pTempBuffer, lCounter);
lCounter = 0;
}
}
delete pTempBuffer;
return true;
}
/**--------------------------------------------------------------
* @param lOffset : 截斷文件的位置
* @return true : 成功,false : 失敗
* @description 截斷文件
*---------------------------------------------------------------*/
bool DCFile::TruncatFile(long lOffset)
{
SetFileLength(lOffset);
return true;
}
/**--------------------------------------------------------------
* @param lReadOffset : 讀出位置的偏移
* @param pBuffer : 接收緩沖區的指針
* @param lBufferLen : 接收緩沖區的長度
* @return 實際讀出文件的長度,異常 = -1
* @description 從文件讀出一塊
*---------------------------------------------------------------*/
long DCFile::ReadFile(long lReadOffset,void *pBuffer, long lBufferLen)
{
if (!m_bOpenFlag)
return -1;
Lseek(lReadOffset,DC_SEEK_SET);
return read(m_FileHandle,pBuffer,lBufferLen);
}
/**--------------------------------------------------------------
* @param lWriteOffset : 寫入位置的偏移
* @param pBuffer : 寫入緩沖區的指針
* @param lBufferLen : 寫入緩沖區的長度
* @return 實際寫入文件的長度,異常 = -1
* @description 寫一塊到文件內
*---------------------------------------------------------------*/
long DCFile::WriteFile(long lWriteOffset,void *pBuffer, long lBufferLen)
{
if (!m_bOpenFlag)
return -1;
Lseek(lWriteOffset,DC_SEEK_SET);
return write(m_FileHandle,pBuffer,lBufferLen);
}
/**--------------------------------------------------------------
* @param pBuffer : 接收緩沖區的指針
* @param lBufferLen : 接收緩沖區的長度
* @return 實際讀出文件的長度
* @description 從文件當前位置讀出一塊
*---------------------------------------------------------------*/
long DCFile::ReadFile(void *pBuffer, long lBufferLen)
{
if (!m_bOpenFlag)
return -1;
return read(m_FileHandle,pBuffer,lBufferLen);
}
/**--------------------------------------------------------------
* @param pBuffer : 寫入緩沖區的指針
* @param lBufferLen : 寫入緩沖區的長度
* @return 實際寫入文件的長度
* @description 從文件當前位置寫入一塊
*---------------------------------------------------------------*/
long DCFile::WriteFile(void *pBuffer, long lBufferLen)
{
if (!m_bOpenFlag)
return -1;
return write(m_FileHandle,pBuffer,lBufferLen);
}
/**--------------------------------------------------------------
* @param 無
* @return 無
* @description 文件指針移動到文件尾
*---------------------------------------------------------------*/
void DCFile::SeekToEnd()
{
if (m_bOpenFlag)
Lseek(0,DC_SEEK_END);
}
/**--------------------------------------------------------------
* @param pFileName : 文件名
* @return true : 成功,false : 失敗
* @description 刪除文件
*---------------------------------------------------------------*/
bool DCFile::DeleteFile(char *pFileName)
{
#ifdef __WINDOWS_OS
return DeleteFile(pFileName);
#else
return !remove(pFileName);
#endif
}
/**--------------------------------------------------------------
* @param pszFileOld : 原文件名
* @param pszFileNew : 新文件名
* @return true : 成功,false : 失敗
* @description 文件改名
*---------------------------------------------------------------*/
bool DCFile::RenameFile(char *pszFileOld,char *pszFileNew)
{
#ifdef __WINDOWS_OS
return RenameFile(pszFileOld, pszFileNew);
#else
return !rename(pszFileOld, pszFileNew);
#endif
}
/**--------------------------------------------------------------
* @param pszFileDst : 拷貝目標文件名
* @param pszFileSrc : 拷貝源文件名
* @return true : 成功,false : 失敗
* @description 拷貝文件
*---------------------------------------------------------------*/
bool DCFile::CopyFile(char *pszFileDst,char *pszFileSrc)
{
if (IsFileExist(pszFileSrc))
return false;
bool bRet = false;
#ifdef __WINDOWS_OS
int hFileSrc = open(pszFileSrc, O_BINARY | O_RDONLY);
int hFileDst = open(pszFileDst, O_CREAT | O_BINARY | O_RDWR);
if ((hFileSrc != -1) && (hFileDst != -1))
{
char *pTempBuffer = new char[MAXTEMPLATEBUFFLEN];
long lFileLength = filelength(hFileSrc);
long lReadLength;
while (lFileLength > 0)
{
if (lFileLength > MAXTEMPLATEBUFFLEN)
lReadLength = MAXTEMPLATEBUFFLEN;
else
lReadLength = lFileLength;
read(hFileSrc,pTempBuffer,lReadLength);
write(hFileDst,pTempBuffer,lReadLength);
lFileLength -= lReadLength;
}
delete [] pTempBuffer;
bRet = true;
}
close(hFileDst);
close(hFileSrc);
#else
ifstream infile(pszFileSrc,ifstream::binary);
ofstream outfile(pszFileDst,ofstream::binary);
if ((infile.is_open()) && (outfile.is_open()))
{
infile.seekg(0,ifstream::end);
long lFileLength = infile.tellg();
infile.seekg(0);
char *pTempBuffer = new char[MAXTEMPLATEBUFFLEN];
long lReadLength;
while (lFileLength > 0)
{
if (lFileLength > MAXTEMPLATEBUFFLEN)
lReadLength = MAXTEMPLATEBUFFLEN;
else
lReadLength = lFileLength;
infile.read(pTempBuffer,lReadLength);
outfile.write(pTempBuffer,lReadLength);
lFileLength -= lReadLength;
}
delete [] pTempBuffer;
bRet = true;
}
outfile.close();
infile.close();
#endif
return bRet;
}
/**--------------------------------------------------------------
* @param lFileLen : 文件長度
* @return true : 成功,false : 失敗
* @description 設文件長度
*---------------------------------------------------------------*/
bool DCFile::SetFileLength(long lFileLen)
{
if (!m_bOpenFlag)
return false;
bool bRet = false;
#ifdef __WINDOWS_OS
int iCurrPos = tell(m_FileHandle);
if (chsize(m_FileHandle,lFileLen) == 0)
bRet = true;
lseek(m_FileHandle,iCurrPos,SEEK_SET);
#else
int iCurrPos = tell(m_FileHandle);
if (ftruncate(m_FileHandle,lFileLen) == 0)
bRet = true;
lseek(m_FileHandle,iCurrPos,SEEK_SET);
#endif
return bRet;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -