Comment sauter une ligne ds un WriteFile()

Signaler
Messages postés
61
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
27 avril 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour, j'utilise la fonction Windows WriteFile() pour écrire dans un fichier.
Cependant je  voudrais intégrer un saut de ligne à la fin de mes données "Data" de mon WriteFile, comment faire??

WriteFile(hFile,                                                 // open file handle
               Data,                                                  // start of data to write
               dwBytesToWrite - dwBytesWritten,  // number of bytes to write
               &dwBytesWritten,                            // number of bytes that were written
               NULL); 

Merci.
A voir également:

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
suffit d'ajouter 2 octets (13 et 10) à ton buffer.

ciao...
BruNews, MVP VC++
Messages postés
61
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
27 avril 2009

Il faut que j'ajoute 2 octets vide à mon Buffer et cela sautera de ligne?
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Non il faut que tu ajoutes 1 octet contenant la valeur 13 et un autre octet contenant la valeur 10.
Cela correspond à un '\r' et '\n' : soit à un retour chariot et un saut de ligne
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
61
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
27 avril 2009

Est ce que tu pourrais me donner la syntaxe stp.
Voici mes data:

char DataBuffer1[] = "This is a test string.";

WriteFile(hFile,                                                 // open file handle
               DataBuffer1,                                    // start of data to write
               14,                                                    // number of bytes to write
               &dwBytesWritten,                            // number of bytes that were written
               NULL); 

Merci
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
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.
<hr size="2" width="100%" />#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;
}