Salut,
Plus d'infos sur CRLF.Voilà un exemple. Écrit "Hello world !" et saut de ligne dans test.txt. Source unicode ou non, mais le fichier généré n'est jamais en unicode.
Si tu veux ajouter un CRLF à des données existantes, il y a
lstrcatA.
Application console.
Pour compiler sous gcc, ajouter -nostartfiles -nodefaultlibs -nostdlib -ffreestanding dans les options du lieur.
Pour compiler sous VC, s'arranger pour que le lieur ignore toutes les librairies par défaut (/nodefaultlib).
S'assurer que kernel32 et user32 sont en entrée du lieur.
#ifdef UNICODE
#define _UNICODE
#endif /* UNICODE */
#include <windows.h>
#include <tchar.h>
char* lpMessage = "Hello world !\r\n";
/**
* Affiche un message d'erreur correspondant à la dernière erreur Win32
*/
DWORD __stdcall Err_ShowLatest()
{
DWORD nLastError; /* Numéro de l'erreur */
LPTSTR lpMessageBuffer; /* Récupération du message */
nLastError = GetLastError();
/* Formatage du message */
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(void*)&lpMessageBuffer, 0, NULL);
/* Affichage du message */
MessageBox(NULL, lpMessageBuffer, _T("ERROR"), MB_OK | MB_ICONERROR);
LocalFree(lpMessageBuffer);
return nLastError;
}
/**
* Main
*/
int __cdecl mainCRTStartup()
{
HANDLE hFile; /* Handle du fichier à ouvrir */
DWORD nNumberOfBytesWritten; /* Nombre d'octets écris */
int nResult;
nResult = 0;
/* Ouverture ou création du fichier */
hFile = CreateFile(_T("test.txt"),
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
nResult = Err_ShowLatest();
goto the_end;
}
/* Ecriture de la phrase */
if (! WriteFile(hFile, lpMessage, lstrlenA(lpMessage), &nNumberOfBytesWritten, NULL))
nResult = Err_ShowLatest();
CloseHandle(hFile);
the_end:
/* ExitProcess nécessaire car sinon c'est un ExitThread */
ExitProcess(nResult);
/* Pour esquiver le warning */
return 0;
}