Sous Windows utilise tout simplement CopyFile, plus d'infos ici:
http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx
Sinon pour ta fonction je pensse que tu devrait au moins copier par passe de 4k minimum, un exemple qui copie par passe de 1mo:
#define BUFFER_SIZE (0x100000)
DWORD __stdcall FileCopy(LPSTR lpszDst, LPSTR lpszSrc)
{
HANDLE hInFile, hOutFile;
DWORD dwRet = 0, br, bw;
BYTE* lpData;
lpData = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, BUFFER_SIZE);
if(!lpData) return 0;
hInFile = CreateFile(lpszSrc, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if(hInFile == INVALID_HANDLE_VALUE) goto _Error;
hOutFile = CreateFile(lpszDst, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if(hOutFile == INVALID_HANDLE_VALUE) goto _Error;
while(1)
{
if(!ReadFile(hInFile, lpData, BUFFER_SIZE, &br, 0)) goto _Error;
if(!br) break; // eof
if(!WriteFile(hOutFile, lpData, br, &bw, 0)) goto _Error;
dwRet+=bw;
}
_Error:
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, lpData);
if(hInFile) CloseHandle(hInFile);
if(hOutFile) CloseHandle(hOutFile);
return dwRet;
}
Neo_Fr
|