bonjour !
voila , j'ai une donnee dans un variable int que je voudrai sauvegarder dans un fichier txt et au passage creer se fichier txt dans le dossier de mon choix :) mais je n'y arrive pas :) donc si quelqu'un sait ,je le remercie d'avance !
Version imprimable
bonjour !
voila , j'ai une donnee dans un variable int que je voudrai sauvegarder dans un fichier txt et au passage creer se fichier txt dans le dossier de mon choix :) mais je n'y arrive pas :) donc si quelqu'un sait ,je le remercie d'avance !
j'ai repondu a cette question il n'y a pas tres longtemps:
http://www.developpez.net/forums/vie...ighlight=cfile
:D
j'ai pas tout compris dans le code mais apres avoir copier le code sa ma fait apparaitre une fenetre dissant "Runtime Error" :( !! sa pourrais venir d'ou ?:)
tu as essayé la derniere version?:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CFile File ("c:\\test", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary ); int anInt[] = {1,100,150,200,300,500,700,800,523,100}; int nSize=sizeof(anInt)/sizeof(int); File.Write(&nSize, sizeof(int)); // 1 int File.Write(anInt, sizeof(anInt));// ecriture en 1 seule fois. File.Close(); nSize=0; CFile Filer ("c:\\test", CFile::modeRead | CFile::typeBinary ); Filer.Read(&nSize, sizeof(int)); int nNumber; for(int i=0;i<nSize;i++) { Filer.Read(&nNumber, sizeof(int)); TRACE("\ni:%d=%d",i,nNumber); } Filer.Close();
note que le code enregistre l'entier en format binaire ,si tu veux le faire en ascii il faudra d'abord convertir l'entier en chaine de caracteres.
:D
vi vi c'etait bien le derniere version :) mais tu creer un fichier ou il existe deja ?
le code cité ecrase/crée le fichier .(CFile::modeCreate )Citation:
Envoyé par zorglub88
:D
a ouki :) !!
en faite j'ai tester et je croit que c'est dès que j'utilise le CFile qu'il y a le runtime error !! il n'y aurais pas un fichier a inclure ?? ou un truc a faire juste avant ?? :)
non puisque tu executes ...Citation:
Envoyé par zorglub88
quelle est l'assertion recontrée ?
:D
heuu hihi c'est quoi une assertion :D ?
ben l'erreur runtime que tu rencontres ,il y a des chances que l'ouverture du fichier echoueCitation:
Envoyé par zorglub88
et comme dans mon exemple je n'ai pas mis de catch pour intercepter l'erreur la suite du code provoquera une erreur. (en cas d'echec d'ouverture fichier).
:D
alor il est dit dans l'erreur:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
voila :) c'est sa ? :D
tu peux executer en mode debug trace ?
:D
Quand il dit qu'il y a une erreur dans le runtime, c'est Visual qui a planté ou le programme ?
Car il m'est arrivé de faire planter la plateforme de développement lors de suppression de composants MFC en ayant des fichiers de code ouverts.
la prochaine fois il faut sévir :haha:Citation:
Envoyé par farscape
alors quand je lance le debug pas a pas sa marche bien jusqu'au moment ou il rentre dans le fichier "filecore.cpp" et qu'il m'ouvre une fenetre qui cherche se fichier :
"f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl"
seulement je c'est pas ou il est :)
("f:" etant ma cles USB je n'est pa se fichier dessus !! )
:D
a si je les trouver dans le c: :) mais apres j'ai cette erreur :) :
Exception non gérée à 0x7c81eb33 dans sauvegarde.exe:Microsoft C++ exception: CFileException @ 0x0012fd88.
alors la je ne c'est pas !! :D
En fait il faut pousser un petit peu plus loin le débug en utilisant les outils Visual appropriés comme les fenêtres de progression Output, Watch et aussi Stack (la pile). Sur la pile, remonter les appels de fonction jusqu'à retrouver une des tiennes qui en fait a poussé le programme à planter. N'hésistes pas à employer des breakpoints.
heuuu comment on fait pour voir la fenetre de progression de la pile ??
:oops:
tu vas voir mon tuto (lien dans ma signature),
chapitre debuggage page 90 et surtout page 91 :D
ouki thx a tout de suite :wink:
erf en faite j'ai pas du tout le meme truc avec ma version :? donc j'essaye d'utiliser desespion mais je c'esp pas trop comment on fait :D ou en tout cas quand j'arrive sur l'erreur je ne c'est toujours pas d'ou elle vient :) mais en pas a pas j'ai remarquer qu'il m'ouvre deux page d'erreur!
la premiere dit :
Exception non gérée à 0x7c81eb33 dans sauvegarde.exe:Microsoft C++ exception: CFileException @ 0x0012fd88.
la dexieme dit :
debug assertion failled ( file : filecore.cpp ; line : 265 )
:)
quelque soit la version de visual tu trouves une fenetre de context comme celle decrit dans le tuto...
au fait tu as changé le nom dans le CFile ?
si oui tu peux montrer ta modification ?
j'ai cru comprendre que tu ecrivais sur une clef usb ,question bête il y a de la place dessus.
dans un de mes posts j'ai precisé que je n'avais pas catché la construction du CFile ,
ça permettrait d'avoir clairement l'erreur ...
:D
en faite j'ai fait un copier coller !! j'ai juste essayer de la melanger avec d'autre facon de faire mais c'etait pire !! :D
et le "demarrer" c'est la meme chose que le "trace" ? :)
apres : sa ve dire quoi "catché" ?? :lol:
et sinon je ne programme pas sur ma cles USB , c'est juste pour copier le fichier apres , question de sureter :)
c'est utiliser le couple TRY/CATCH .
on va faire simple et différend:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 CFile File; CFileException e; if( !File.Open( "c:\\test", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary , &e ) ) { #ifdef _DEBUG afxDump << "File could not be opened " << e.m_cause << "\n"; #else CString str; str.Format("File could not be opened %d",e.m_cause); AfxMessage(str); #endif } int anInt[] = {1,100,150,200,300,500,700,800,523,100}; int nSize=sizeof(anInt)/sizeof(int); File.Write(&nSize, sizeof(int)); // 1 int File.Write(anInt, sizeof(anInt));// ecriture en 1 seule fois. File.Close(); nSize=0; CFile Filer ("c:\\test", CFile::modeRead | CFile::typeBinary ); Filer.Read(&nSize, sizeof(int)); int nNumber; for(int i=0;i<nSize;i++) { Filer.Read(&nNumber, sizeof(int)); TRACE("\ni:%d=%d",i,nNumber); } Filer.Close();
alors :) la generation marche comme avant mais apres quand je demarre le projet il ne me lance plus la fenetre Runtime Error mais juste celle :
debug assertion failled ( file : filecore.cpp ; line : 265 )
et j'ai juste changer l'adrresse du fichier :)
generation == compilation et edition des liens je suppose ?Citation:
Envoyé par zorglub88
c'est quoi l'erreur reportée dans le panneau debug ?
justement c'est ca le truc , :) c'est qu'il y a rien marqué !!! :cry:
si tu traces pas a pas ce code tu peux dire qu'elle est la derniere ligne executée ?
note:normalement en remontant la pile d'execution ca suffit pour la retrouver
mais que tu n'y arrive pas :cry:
:D
dsl :oops:
enfin l'erreur se trouve a l'execution de cette ligne :D:
File.Write(&nSize, sizeof(int)); // 1 int
:)
bon alors on va encore modifier l'ouverture:
tu devrais avoir un messagebox apparaitre.Code:
1
2
3
4
5
6
7 if( !File.Open( "c:\\test", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary , &e ) ) { CString str; str.Format("File could not be opened %d",e.m_cause); AfxMessage(str); }
:)
alors j'ai changer le AfxMessage en AfxMessageBox !!
puis quand j'ai demarrer mon programme sa m'a ouvert la fenetre avant e me lancer le assertion failled!
ensuite j'ai rechanger l'adresse de c:\\test en d:\\..... et sa a marcher :)
ENFIN :D !!!!!!!! (en faite je crois que je fesai une erreur a un endroit :) )
mais j'ai regarder a l'emplacement et je n'est pas vu defichier texte :) !!!!
:D
tu peux donner le code de l'erreur svp ?
ça serait pas 5 pas hasard ?
:D
a non c'etait pas une erreur que reperer le compilateur , je copier mal un truc ! :oops: dsl pour cette erreur !
mais comment on fait apres pour faire que le fichier se voit et soit permanent !! :D
c'est quoi l'erreur 5 ? :)