Question

dans l'environnement VC Im en utilisant (string) fonction getline pour lire des lignes distinctes dans le fichier ouvert. Le problème est que getline prend le caractère 1Ah comme la fin du fichier et si elle est présente sur la ligne, entiers se termine prématurément la lecture. Y at-il une solution pour cela?

Extrait de code:

fstream LogFile (Source,fstream::in);
string Line

while (getline(LogFile,Line))
{  ....  }

Contenu du fichier:

line1text1asdf
line2text2asd //EOF for getline here
line3asdas // this line will never be read by getline

Merci pour toute information.

Kra

Était-ce utile?

La solution

Remplacer getline avec une fonction roulées à la main qui se lit dans le caractère par caractère jusqu'à la fin de la ligne ou EOF, tel que défini par vous.

Autres conseils

Oui, Ctrl + Z était le caractère de fichier EOF pour les fichiers texte dans les systèmes d'exploitation anciens. Il est un caractère de contrôle qui ne devrait vraiment pas être présent dans un fichier texte, vous ne pouvez pas significatif traduire. Openmode :: binaire est tout ce que vous pouvez faire si ce qui est nécessaire.

Je préfère généralement d'ouvrir le fichier sous forme binaire, lire les données avec la fonction ci-dessous, et analyse pour « \ n » et « \ r » pour détecter la fin des lignes.

UINT xread(HFILE hfile, void *buf, UINT size)
{
   UINT ret;


   #if defined(_WIN32)

   ret = _read(hfile, buf, size);

   #elif defined(_LINUX) || defined(__APPLE__)

   ret = read(hfile, buf, size);

   #endif


   return(ret);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top