J'ai une fonction C qui écrit des données dans un fichier texte. Les données sont constituées de flottants, d'entiers et de chaînes. il ressemble à ceci:une seule fonction C pour écrire des données au format texte ou binaire
writeAsTextFile( mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName);
pour ce faire j'utilise des appels à fprintf;
Maintenant je voudrais écrire les mêmes données mais comme binaire. Je pourrais écrire une deuxième fonction writeAsBinaryFile et utiliser des appels à fwrite à la place. Mais à chaque fois que je vais changer la conception de mystruct_t, je devrai modifier à la fois writeAsTextFile et writeAsBinaryFile. Et bien sûr le readAsTextFile correspondant et readAsBinaryFile. En plus de cela, cela va augmenter la taille des codes. Je voudrais donc avoir une seule fonction générique avec un argument bin ou texte qui ressemblerait à ceci:
writeToFile(mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName, myEnumType_t eOption)
où l'option serait un ENUM Ebin = 0 et eTxt = 1 par exemple. En fonction de eOption, la fonction écrira des données binaires ou textuelles.
Je ne sais pas quelle serait la meilleure façon d'y parvenir. Dois-je utiliser fwrite aussi pour écrire en tant que texte, Devrais-je essayer d'utiliser des macros? (J'ai vu l'utilisation de la directive ## quelque part mais je ne l'ai jamais utilisée), ou des instructions switch/ifs partout où j'ai besoin d'écrire dans un fichier? Ou dois-je écrire une fonction générique comme myWriteFunction(void *data, char const type, myEnumType_t eOption)
qui serait appelée par writeToFile?
Je ne suis pas très familier avec l'utilisation fread/fwrite et macros de sorte que tout meilleurs commentaires pratiques, idées, etc sont les bienvenus,
Merci
Baba
Alors que vous êtes dans le mode de conception d'un fichier de données, avez-vous considéré quelque chose de plus universel comme JSON ou XML? Alors toutes les écritures sont des écritures de texte. Vous serez capable de lire votre fichier à partir de presque n'importe quel autre environnement de programmation et ce n'est pas plus de travail que ce que vous faites maintenant. Tenez-vous sur les épaules des géants qui marchent devant vous. – dawg