BOOL FileConcat(LPSTR lpszDstFile, LPSTR lpszSrcFile)
{
HANDLE hSrcFile, hDstFile;
BOOL ret = FALSE;
BYTE* lpBuffer;
hSrcFile = CreateFile(lpszSrcFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if(hSrcFile != INVALID_HANDLE_VALUE) {
hDstFile = CreateFile(lpszDstFile, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
if(hDstFile != INVALID_HANDLE_VALUE) {
if((lpBuffer = (BYTE*)HeapAlloc(GetProcessHeap(), 0, 0x100000))) { // 1mo
SetFilePointer(hDstFile, 0, 0, FILE_END);
while(1) {
DWORD dummy;
if(!ReadFile(hSrcFile, lpBuffer, 0x100000, &dummy, 0)) goto _Error;
if(!dummy) break;
if(!WriteFile(hDstFile, lpBuffer, dummy, &dummy, 0)) goto _Error;
}
ret = TRUE;
_Error:
HeapFree(GetProcessHeap(), 0, lpBuffer);
}
CloseHandle(hDstFile);
}
CloseHandle(hSrcFile);
}
return ret;
}
C++ (@++)