Problème fichier texte (ofstream) taille ?

Résolu
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010 - 24 oct. 2008 à 19:06
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010 - 26 oct. 2008 à 15:12
Bonjour à tous, voila, j'ai repri il y a quelque temps la base d'une source qui listait tous les fichiers d'un repertoire.
Jusque là aucun souci. Cependant j'ai ajouté l'enregistrement de chaque nom de fichier (avec ofstream). Ainsi chaque nom de fichier est ajouté au fichier texte créé. Le problème est que : quand le processus est terminé et le fichier fermé, celui-ci n'a pas toutes les informations enregistrés mais uniquement les dernieres adresses. Y'a t-il une limite de taille pour les fichier txt ?j'ai retourné le problème dans tout les sens et ne trouve pas la solution.

Remarque : pendant l'execution du processus de listage le fichier est plus gros et a l'air de contenir toutes les donné mais a un moment il redevient petit et n'affiche que les dernieres adresses trouvés et des epsaces.
Voila, je m'en remet donc a vous. javascript:Insert_Emoticon('/imgs2/smile_blush.gif');



Voici ma source :
#include <cstdlib>
#include
#include <fstream.h>
#include <windows.h>

using namespace std;
void ScruterSousDossiers(char * Dossier)
{
ofstream file;
file.open("texte.txt");

HANDLE hRecherche;
WIN32_FIND_DATA WFD;
char * Nom = WFD.cFileName;
char DossFiltre[1024], DossRech[1024];
//-----//
strcpy(DossFiltre, Dossier);
strcat(DossFiltre, "*.*");
hRecherche = FindFirstFile(DossFiltre, &WFD);
if(hRecherche == INVALID_HANDLE_VALUE)
{
FindClose(hRecherche);
return;
}
do
{
if(!(WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if(!(Nom[0] == '.' && !Nom[1]) && !(Nom[0] == '.' && Nom[1] == '.' && !Nom[2]))
{
strcpy(DossRech, Dossier);
strcat(DossRech, Nom);

cout << DossRech;
cout <<"\n";
file << DossRech <<"\n";
// PLACER LE CODE DE TRAITEMENT ICI, POUR fichier "DossRech".

}
}

if((WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
if(!(Nom[0] == '.' && !Nom[1]) && !(Nom[0] == '.' && Nom[1] == '.' && !Nom[2]))
{

strcpy(DossRech, Dossier);
if (strcmp(DossRech, "C:\\WINDOWS") != 1 )
{
if (strcmp(DossRech, "C:\\Program Files") != 1 )
{
strcat(DossRech, Nom);
strcat(DossRech, "\");

// PLACER LE CODE DE TRAITEMENT ICI, POUR LE DOSSIER "DossRech".
ScruterSousDossiers(DossRech);
}
}
}
}
}
while(FindNextFile(hRecherche,&WFD));
FindClose(hRecherche);
file.close();
}


int main(int argc, char *argv[])
{
ScruterSousDossiers("C:\");
system("PAUSE");
return EXIT_SUCCESS;
}
</windows.h></fstream.h></cstdlib>

4 réponses

baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
26 oct. 2008 à 15:12
Finalement j'ai trouvé la solution : il faut ouvrir le fichier de la forme :

file.open("texte.txt", std::ios_base::app );

Voila, en esperant que cela serve a quelqu'un.
3
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
24 oct. 2008 à 19:20
escusez moi, je ne pensait pas que le code s'afficherai comme ca. ma question :


Bonjour à tous, voila, j'ai repri il y a quelque temps la base d'une source qui listait tous les fichiers d'un repertoire.
Jusque là aucun souci. Cependant j'ai ajouté l'enregistrement de chaque nom de fichier (avec ofstream). Ainsi chaque nom de fichier est ajouté au fichier texte créé. Le problème est que : quand le processus est terminé et le fichier fermé, celui-ci n'a pas toutes les informations enregistrés mais uniquement les dernieres adresses. Y'a t-il une limite de taille pour les fichier txt ?j'ai retourné le problème dans tout les sens et ne trouve pas la solution.

Remarque : pendant l'execution du processus de listage le fichier est plus gros et a l'air de contenir toutes les donné mais a un moment il redevient petit et n'affiche que les dernieres adresses trouvés et des epsaces.
Voila, je m'en remet donc a vous.


mon code : http://sertuk.free.fr/demandeaidecpp
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
25 oct. 2008 à 01:39
oui si je comprend bien ta fonction est appellé recusivement l'ors de l'ouverture du fichier en ecriture il flush le contenu et reecrit du debut du fichier

donc ca devrait etre

file.open("Myfile.txt","a+");
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
25 oct. 2008 à 16:49
Merci de m'avoir répondu, je pense que ca doit être ca mais le problème est que mon compilateur (dev c++) m'affiche cette erreur : 

no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::open(const char[11], const char[3])'

et :

 note C:\Dev-Cpp\include\c++\3.4.2\fstream:695 candidates are: void std::basic_ofstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
0