2010-09-18 13 views
0

en considérant le compilateur visuel C++, Disons que j'ai un fichier avec n'importe quelle extension et 100 octets de données qui sont exactement les données que je veux initialiser un tableau de type de données de caractères avec une longueur de 100 caractères avec, Maintenant, apparemment, une façon consiste à lire ces données hors du fichier en utilisant des classes de fichiers d'E/S ou des API à l'exécution ce que je veux savoir est, est-il possible d'utiliser des directives ou quelque chose pour dire au compilateur que je veux mettre ces données au bon endroit dans mes fichiers image de l'application au moment de la compilation et que le compilateur devrait lire ces données?Une façon de lire les données d'un fichier au moment de la compilation pour le mettre quelque part dans les fichiers image de l'application pour initialiser un tableau

Répondre

4
  • Ecrivez un programme qui lit le fichier de données de 100 octets et génère en sortie un fichier avec un code/une syntaxe C++ pour déclarer un tableau avec les 100 octets du fichier.
  • Incluez ce nouveau fichier généré (inline) dans votre fichier C++ principal.
  • Appelez le compilateur C++ sur le fichier C++ principal.
0
#include "filename" 

ou suis-je manque quelque chose évidente?

+0

Cela ne fonctionnera pas - il dit que le fichier est des données brutes (pas de code) – egrunin

+0

C'est parce que la question a été éditée depuis que j'ai répondu. – Dipstick

+0

@Dipstick_No, Edition n'a rien à voir avec le changement du problème principal. – Pooria

2

Vous faites cela avec une ressource dans un programme Windows. Cliquez avec le bouton droit sur le projet, Ajouter, Ressource, Importer. Donnez un nom au type de ressource personnalisé. Modifiez l'ID de ressource, si nécessaire. Obtenez un pointeur vers les données de ressources à l'exécution avec FindResource et LoadResource.

+0

Est-ce que le compilateur examine la ressource au moment de la compilation? – letronje

+0

Le compilateur de ressources, oui. Pas beaucoup d'examen en cours, il ne fait qu'intégrer les octets. –

+0

Vous dites que toujours en utilisant une fonction comme FindResource ou LoadResource est nécessaire et que cela serait fait à l'exécution, je voulais dire une solution à la compilation. – Pooria

1

Ce que j'utilise fréquemment dans les tests pour données textuelles est je crée un objet contenant std::istringstream le texte du fichier à lire comme ceci:

#include <string> 
#include <fstream> 
#include <sstream> 

// raw string literal for easy pasting in 
// of textual file data 
std::istringstream internal_config(R"~(

# Config file 

host: wibble.org 
port: 7334 
// etc.... 

)~"); 

// std::istream& can receive either an ifstream or an istringstream 
void read_config(std::istream& is) 
{ 
    std::string line; 
    while(std::getline(is, line)) 
    { 
     // do stuff 
    } 
} 

int main(int argc, char* argv[]) 
{ 
    // did the user pass a filename to use? 
    std::string filename; 
    if(argc > 2 && std::string(argv[1]) == "--config") 
     filename = argv[2]; 

    // if so try to use the file 
    std::ifstream ifs; 
    if(!filename.empty()) 
     ifs.open(filename); 

    if(ifs.is_open()) 
     read_config(ifs); 
    else 
     read_config(internal_config); // file failed use internal config 
}