Problème fichier texte (ofstream) taille ? [Résolu]

Signaler
Messages postés
193
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2010
-
baby3378
Messages postés
193
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2010
-
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

Messages postés
193
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2010

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.
Messages postés
193
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2010

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
Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
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+");
Messages postés
193
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2010

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>]