J'ai un tableau d'une grande structure que j'essaie de sortir sur le disque dur. J'ai l'impression d'être capable d'écrire sur le disque dur (bien qu'il soit difficile de le vérifier en regardant les données binaires), mais quand je tente de le relire, je me retrouve toujours avec un désordre brouillé. Des idées de ce que je fais mal?Sortie de grandes structures en HD
est ici la configuration de la structure:
class xyz
{
public:
double x, y, z;
};
class trianglePackage
{
public:
int score;
int position;
xyz contactCoordinates;
xyz normalVector;
xyz locatorOffset;
};
class quadanglesOutput
{
public:
int locator1position, locator2position, locator3position, locator4position;
xyz centroid;
int surfaceAreaScore;
int centroidDifferance1Score;
int centroidDifferance2Score;
int minDistance1Score;
int minDistance2Score;
int totalLocatorScore;
int totalHullScore;
int totalScore;
double surfaceArea;
double centroidDifferance1;
double centroidDifferance2;
double minDistance1;
double minDistance2;
int hull;
trianglePackage locator1, locator2, locator3, locator4;
};
et voici les lecture/fonctions d'écriture que je utilise:
void outputQuadangleOutput(quadanglesOutput* output, string description, param parameters)
{
string outputName = parameters.fileName + " " + description + ".bin";
cout << "Output " << outputName.c_str() << "...";
ofstream output2;
output2.open(outputName.c_str());
output2.write(reinterpret_cast<char*>(output), streamsize(parameters.topXlist * sizeof(quadanglesOutput)));
output2.close();
cout << "done" << endl;
}
void readIn(quadanglesOutput* pointer, param parameters, string description)
{
string fileName = parameters.fileName + " " + description + ".bin";
cout << "openining " << fileName << "...";
ifstream readFile;
readFile.open(fileName.c_str());
readFile.read(reinterpret_cast<char*>(pointer), (parameters.topXlist * sizeof(quadanglesOutput)));
readFile.close();
cout << "done" << endl;
}
En général, les tableaux de structures sont environ 100 en longueur, mais en général seulement à propos des 25 premières lectures correctement, tout le reste est des données non initialisées par défaut.
Je suis sûr à 99% que quelque chose ne va pas avec mon code, mais est-il possible qu'il ait quelque chose à voir avec un alignement de quatre octets?
Merci.
Hmm, ça fait toujours la même chose qu'avant. Les 25 premières entrées sont bonnes, le reste est brouillé. – Faken
Le drapeau binaire semble avoir même réduit le nombre de valeurs correctement lues, maintenant il ne lit que les 10 premiers éléments avant de produire une sortie apparemment aléatoire (par opposition à la sortie précédente "CD" dans le code hex encore et encore). – Faken
@faken: Avez-vous utilisé le mode binaire pour l'entrée et la sortie? –