Comment Écrire des Chaînes de caractères Dans un Fichier Binaire
Avec ce code, j'ai essayé d'imprimer la chaîne "toto" 10 fois
dans un format binaire. Mais pourquoi ne pas la fonction pour le faire fonctionner?
#include <iostream>
#include <fstream>
using namespace std;
template <typename T> void WriteStr2BinFh (string St, ostream &fn) {
for (unsigned i = 0; i < St.size(); i++) {
char CStr = St[i];
fn.write(&CStr.front(), CStr.size());
}
return;
}
int main() {
string MyStr = "Foo";
ofstream myfile;
myfile.open("OuputFile.txt", ios::binary|ios::out);
//We want to print it 10 times horizontally
//separated with tab
for (int i = 0; i < 9; i++) {
WriteStr2BinFh(Mystr+"\t", myfile);
}
myfile.close();
}
OriginalL'auteur neversaint | 2009-03-26
Vous devez vous connecter pour publier un commentaire.
Il y a donc beaucoup de mal ici, je vais juste énumérer tout ce que je vois:
Pour votre condition de boucle doit être i < 10.
Pourquoi êtes-vous à l'aide d'un modèle mais pas la templatized paramètre T?
Vous êtes à l'appel de la méthode avant() sur CStr, mais CStr est un char, pas une chaîne, donc je ne sais même pas qui compile.
En supposant CStr est une chaîne de caractères, vous ne voulez pas prendre l'adresse de l'avant() itérateur à l'aide de &, au contraire, vous voulez dire quelque chose comme:
Et vous ne voulez pas de la boucle de Saint-size() itérations. Il suffit de faire ci-dessus.
OriginalL'auteur i_am_jorf
omg, il ont beaucoup d'erreurs:
fixe à votre exemple, avec votre code d'organiser et de votre nom:
mais je l'ai recommandé d'utiliser
std::fill_n
algorithmeIntrest fait. J'ai vérifié - élément 3.6.1.5 de standrd - oui, vous avez raison. Mais de toute façon, je thnk il convient de clarifier.
OriginalL'auteur bayda
D'abord,
char CStr
dit queCStr
est un caractère unique. Deuxièmement,fn.write(&CStr.front(), CStr.size());
traite que ce personnage est un conteneur, commestd::vector<>
, qui bien sûr ne peut pas compiler.En supposant que tout jusqu'à
WriteStr2BinFh
est ok, je n'ai pas vérifié, c'est commentWriteStr2BinFh
devrait (pourrait) look:ou, de préférence
OriginalL'auteur Johann Gerell
Points importants pour faire une opération e /s en mode binaire:
Fichier doit être fermé à la fin.
Cet I/O fonction binaire écrit des données dans la fonction.
Le fichier est ouvert en sortie et le mode binaire avec ios::out et ios::binary.
Il y a un spécificateur de ios::app, qui indique au système d'Exploitation que le fichier est ouvert en mode ajout. Cela signifie tout nouvel ensemble de données seront ajoutées à la fin du fichier.
La fonction d'écriture utilisé ci-dessus, doit le paramètre comme un personnage de type pointeur. Nous avons donc utiliser un convertisseur de type reinterpret_cast de transtypage de la structure en char* type.
OriginalL'auteur HipsterZipster