Maison  >  Article  >  développement back-end  >  Comment lire efficacement tous les octets d’un fichier dans un tableau de caractères en C ?

Comment lire efficacement tous les octets d’un fichier dans un tableau de caractères en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 02:16:30539parcourir

How to Efficiently Read All Bytes from a File into a Character Array in C  ?

Comment récupérer tous les octets d'un fichier dans un tableau de caractères en C

Étant donné un fichier situé dans "C:MyFile.csv" et un tampon de tableau de caractères de taille 10 000, comment pouvez-vous lire efficacement tous les octets du fichier dans le tampon ?

Considérez l'approche suivante, ce qui est généralement préféré à l'utilisation de getline() dans ce scénario :

<code class="cpp">// Open the file in binary mode to preserve byte-by-byte fidelity
std::ifstream infile("C:\MyFile.csv", std::ios_base::binary);

// Determine the file's size
infile.seekg(0, std::ios::end);
size_t file_size = infile.tellg();
infile.seekg(0, std::ios::beg);

// Ensure that the buffer is of sufficient size
if (file_size > sizeof(buffer)) {
    // Handle the case where the file exceeds the buffer's capacity
}

// Read the entire file's contents into the buffer
infile.read(buffer, file_size);

// Obtain the actual number of bytes read from the file
std::streamsize bytes_read = infile.gcount();</code>

Notes supplémentaires :

  • Utilisation de seekg() et tellg() pour déterminer la taille du fichier est généralement fiable mais non garantie, pensez donc à gérer les erreurs supplémentaires.
  • Si le fichier est ouvert en mode non binaire, certaines traductions de caractères peuvent se produire, ce qui peut entraîner une différence entre la taille du fichier et le nombre d'octets finalement stockés dans le tampon.
  • Pour les fichiers plus volumineux ou les cas où vous préférez des tampons redimensionnables, envisagez d'utiliser std::vector et std::istreambuf_iterator pour un fichier plus efficace. lecture.

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