Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
7 nov. 2007 à 01:22
Remplace InFile par ton fichier a convertir..
DWORD __stdcall NbLines(char* FileName)
{
HANDLE hFile;
DWORD FileSize 0, pBuff 0, Lines = 0, br;
BYTE* Buff;
hFile = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) return 0;
FileSize = GetFileSize(hFile, 0);
if(FileSize == INVALID_FILE_SIZE) goto Error;
Buff = HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, FileSize+1);
if(!Buff) goto Error;
if(!ReadFile(hFile, Buff, FileSize, &br, 0)) goto Error;
while(1)
{
if(Buff[pBuff] == 0x0D) Lines++;
if(pBuff == FileSize) break;
pBuff++;
}
Error:
if(Buff) HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, Buff);
if(hFile) CloseHandle(hFile);
return Lines;
}
int main(void)
{
const char InFile[] = "C:\\in.txt\0";
const char OutFile[] = "C:\\out.txt\0";
HANDLE hFile;
DWORD FileSize 0, pBuff 0, ls = 0, Lines, br, bw;
DWORD CrLf = 0x6E5C725C; // \r\n
BYTE* Buffer;
Lines = NbLines(InFile);
hFile = CreateFile(InFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) return 1;
FileSize = GetFileSize(hFile, 0);
if(FileSize == INVALID_FILE_SIZE) goto Error;
Buffer = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE|HEAP_ZERO_MEMORY, (FileSize+(Lines*2))+1);
if(!ReadFile(hFile, Buffer, FileSize, &br, 0)) goto Error;
if(FileSize != br) goto Error;
CloseHandle(hFile);
hFile = CreateFile(OutFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
while(1)
{
if(Buffer[pBuff] == 0x0D)
{
if(!WriteFile(hFile, &Buffer[pBuff-ls], ls, &bw, 0)) goto Error;
if(!WriteFile(hFile, &CrLf, 4, &bw, 0)) goto Error;
pBuff++; ls = -1;
}
if(pBuff == FileSize) break;
pBuff++; ls++;
}
Error:
if(Buffer) HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, Buffer);
if(hFile) CloseHandle(hFile);
return 0;
}
Neo_Fr