2011-03-27 5 views
0

Tous,Sortie de fichier C++

Je ne suis pas un idiot de programmation, mais le code suivant produit des fichiers de 0 octet. J'ai vérifié que le nom de fichier est correct, et les fichiers sont créés. Je suis même allé jusqu'à faire lire, écrire et exécuter les fichiers pour tout le monde, et spécifier que les fichiers soient tronqués et non seulement recréés à chaque fois, et toujours des fichiers de 0 octet.

fstream fs; 
fs.clear(); 
fs.open(dataFileName.c_str(), fstream::out| fstream::trunc); 
std::cout << dataFileName.c_str() << std::endl; 

for (int idx = 0; idx < theNumberHorizontalPoints; ++idx) 
{ 
    for (int zdx = 0; zdx < theVerticalProfilePtr->getNumberVerticalLevels(); ++zdx) 
    { 
     fs << theThermalArray[idx][zdx] << " "; 
    } 
    fs << std::endl; 
    fs.flush(); 
} 
fs.close(); 
+3

êtes-vous sûr que le NumberHorizontalPoints est rempli correctement? Essayez d'utiliser un débogueur. –

+4

Commentez les boucles 'for' et essayez le texte d'exemple' 'fs <<" "<< endl;'. Voir si cela fonctionne et vous savez que le problème est avec vos compteurs de boucle – pajton

+1

est votre boucle exécutée du tout? Pourriez-vous s'il vous plaît mettre 'std :: cout << theThermalArray [idx] [zdx] <<" ";' près 'fs << theThermalArray [idx] [zdx] <<" ";'? – Vlad

Répondre

0

Des parties importantes du code manquent. Quelles sont les dimensions de votre tableau? Le reste du code semble être bon, donc j'ai écrit une petite application de test qui écrit les numéros [1-6] dans un fichier nommé demo.txt.

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    fstream fs; 
    fs.clear(); 
    fs.open("demo.txt", fstream::out | fstream::trunc); 

    int theThermalArray[][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; 
    int theNumberHorizontalPoints = 2; 

    for (int idx = 0; idx < theNumberHorizontalPoints; ++idx) 
    { 
     for (int zdx = 0; zdx < 3; ++zdx) 
     { 
      fs << theThermalArray[idx][zdx] << " "; 
     } 
     fs << std::endl; 
     fs.flush(); 
    } 
    fs.close(); 
} 
+0

La dernière instruction d'un en-tête de boucle for est exécutée à la fin d'une itération et non au début. C'est pourquoi c'est complètement hors de propos si vous utilisez '++ idx' ou' idx ++ '. – Xeo

+0

@Xeo Totalement vrai. Merci. – karlphillip

0

Si la propriété NumberHorizontalPoints est égale ou inférieure à zéro, vous obtiendrez le résultat que vous décrivez.

+0

J'ai vérifié cela, theNumberHorizontalPoints = 29. J'ai utilisé un débogueur pour aller dans la boucle pour voir ce qui se passait. Je peux pousser une ficelle sur le flot, mais une fois que je pousse un double sur le flot, il n'y aura plus de contribution. –

+0

fs << std :: endl; ajoute au moins un octet à fs selon la plate-forme. Le fichier de taille zéro ne peut être créé que si l'écriture sur fs échoue ou si theNumberHorizontalPoints est <= 0. Au fait, std :: endl vide le flux de sorte que fs.flush() soit redondant. – Tobias

Questions connexes