Maison >développement back-end >C++ >Comment lire le contenu d'un fichier sous forme de tableau de caractères en C en utilisant ifstream::read() et istreambuf_iterator ?

Comment lire le contenu d'un fichier sous forme de tableau de caractères en C en utilisant ifstream::read() et istreambuf_iterator ?

DDD
DDDoriginal
2024-11-01 00:57:02458parcourir

How to read file contents as a character array in C   using ifstream::read() and istreambuf_iterator?

Comment lire le contenu d'un fichier sous forme de tableau de caractères en C

Arrière-plan

Cette question demande comment remplir un tampon de tableau de caractères avec les octets d'un fichier nommé inputFile. L'utilisateur a rencontré des difficultés avec d'autres approches suggérées qui utilisent getline() au lieu de ifstream::read().

Solution

Il existe quelques approches pour résoudre ce problème. tâche :

Utilisation d'ifstream::read()

Cette méthode implique :

  1. Ouverture du fichier : Utilisez std::ifstream pour ouvrir le fichier en mode binaire afin d'éviter les traductions de caractères.
  2. Détermination de la taille du fichier : Utilisez seekg() et tellg() pour obtenir la longueur du fichier.
  3. Lecture des données : Appelez read() pour lire le contenu du fichier dans le tampon, en vous assurant que la taille du tampon est suffisante.

Exemple de code :

<code class="cpp">// Open file in binary mode
std::ifstream infile("C:\MyFile.csv", std::ios_base::binary);

// Get file length
infile.seekg(0, std::ios::end);
size_t length = infile.tellg();
infile.seekg(0, std::ios::beg);

// Read file
infile.read(buffer, length);</code>

Utiliser istreambuf_iterator

Cette approche est plus moderne et utilise des itérateurs pour lire le fichier :

  1. Créer un Istreambuf_iterator : Attribuez std::istreambuf_iterator(infile) à l'itérateur de début et std::istreambuf_iterator() à l'itérateur de fin.
  2. Utilisez Vector pour stocker les caractères : Créez un vecteur std::vector et poussez tous les caractères de l'itérateur de début à la fin dans le vecteur.
  3. Copier le vecteur dans le tableau : Attribuez les données vectorielles au tampon à l'aide de std::copy.

Exemple de code :

<code class="cpp">// Create iterators
std::istreambuf_iterator<char> begin(infile);
std::istreambuf_iterator<char> end;

// Create vector
std::vector<char> contents(begin, end);

// Copy vector to array
std::copy(contents.begin(), contents.end(), buffer);</code>

Considérations

  • Limites de taille de fichier : ifstream : read() peut faire déborder le tampon si la taille du fichier dépasse sa taille. Envisagez plutôt d'utiliser des lectures tamponnées ou des tampons redimensionnables.
  • Gestion des erreurs : Vérifiez les erreurs de lecture potentielles à l'aide de infile.fail() ou infile.eof() après les tentatives de lecture.
  • Mode binaire : Si le fichier contient des caractères non-ASCII, ouvrez-le en mode binaire pour conserver leur encodage d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn