代码拉取完成,页面将自动刷新
#include "StdAfx.h"
#include "FileSplit.h"
LPBYTE LoadFile(LPCTSTR lpFileName, LPDWORD lpSize)
{
BOOL ret;
CFile file;
DWORD size;
LPBYTE buff;
ret = file.Open(lpFileName, CFile::modeRead | CFile::shareDenyNone);
if(!ret)
{
return NULL;
}
size = (DWORD)file.GetLength();
if(size == 0)
{
return NULL;
}
buff = (LPBYTE)malloc(size);
if(buff != NULL)
{
*lpSize = size;
file.Read(buff, size);
}
file.Close();
return buff;
}
void FreeFile(LPBYTE pData)
{
free(pData);
}
BOOL CFileSplit::SaveFileData(INT index, LPBYTE data, UINT size)
{
char text[32];
CString file_name;
CFile file;
sprintf(text, ".part%d", index);
file_name = m_dir + "\\" + m_base_name + text + m_ext_name;
CreateDirectoryA(m_dir, NULL);
BOOL ret = file.Open(file_name, CFile::modeCreate|CFile::modeReadWrite);
if(ret)
{
file.Write(data, size);
file.Close();
return TRUE;
}
TRACE("index=%d, data=%p, size=%d\n", index, data, size);
return FALSE;
}
BOOL CFileSplit::Setup(LPBYTE find, UINT find_size, INT offset)
{
memcpy(m_find, find ,find_size);
m_find_size = find_size;
m_offset = offset;
return TRUE;
}
BOOL CFileSplit::Process(LPCTSTR szInputFile, LPCTSTR szOutputDir, CFileSplitListen *pListener)
{
int index;
DWORD addr;
DWORD size;
DWORD last;
LPBYTE file_data;
file_data = LoadFile(szInputFile, &size);
if(file_data == NULL)
{
return FALSE;
}
m_ext_name = PathFindExtensionA(szInputFile);
m_base_name = PathFindFileNameA(szInputFile);
m_dir = szOutputDir;
last = 0;
index = 0;
addr = (m_offset < 0) ? (0 - m_offset) : 0;
size -= m_find_size;
size -= (m_offset > 0) ? m_offset : 0;
while(addr < size)
{
if(memcmp(&file_data[addr], m_find, m_find_size) == 0)
{
SaveFileData(index, &file_data[last], addr + m_offset - last);
index++;
last = addr + m_offset;
addr += m_find_size;
}
else
{
addr += 1;
}
}
SaveFileData(index, &file_data[last], addr + m_offset - last + m_find_size);
FreeFile(file_data);
return TRUE;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。