Ciao,
Am si eu o problema.
Vreau sa scriu date intr-un fisier .txt folosind metodele clasei CFile din MFC. Toate bune si frumoase pana ce insa vreau sa introduc in fisier o linie gola si apoi sa continuii scrierea cu alte date.
Deci intrebarea mea este: "Cum pot sa scriu intr-un fisier o linie goala ( libera ) folosind functionalitatile clasei MFC, CFile?"
Mersi fain tuturor celor care imi vor da sugestii.
Intrebare Visual c++
Intrebare Visual c++
Last edited by Popa Alin on 31 May 2008, 11:29, edited 1 time in total.
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.
- Ovidiu Cucu
- Fondator
- Posts: 3778
- Joined: 11 Jul 2007, 16:10
- Judet: Iaşi
- Location: Iasi
- Contact:
Re: Intrebare Visual c++
Daca lucrezi in MFC cu fisiere text, mai simplu este sa folosesti clasa "specializata" pentru asa ceva, numita CStdioFile.
Pentru trecere la linie noua trebuie sa apenduiesti stringul cu "\r\n".
Pentru o line goala, pur si simplu scrii "\r\n".
Pentru trecere la linie noua trebuie sa apenduiesti stringul cu "\r\n".
Pentru o line goala, pur si simplu scrii "\r\n".
Ovidiu
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Re: Intrebare Visual c++
Mersi de informatie, o sa imi fie foarte utila pe viitor, insa acum tot nu imi merge 
Am uitat sa specific mai clar: este un fisier .ini nu .txt
Credeam ca functioneaza la fel.
Ce probleme este: "In fisierele de .ini scriu informatii cu functia WritePrivateProfileString(). Eu am incercat cum mi-ai zis tu insa apare celebra eroare <<Debug assertion failed>>. Eu am facut in felul urmator:
CStdioFile f;
f.Open((LPCTSTR)csPath,CFile::modeWrite );
WritePrivateProfileString(); -> scrie la sectiunile din fisierul de ini si chiar merge asta scrie ca ramane in fisier dupa ce executa urmatoarea instructiune
f.WriteString("\r\n"); -> aici apare eroarea. si ma gandesc ca nu e buna aceasta functie pentru fisierele ini.
P.S. Sorry ca nu am specificat de prima data ca sunt de fapt fisiere de .ini, am crezut ca se lucreaza la fel ca si cu fisierele .txt.

Am uitat sa specific mai clar: este un fisier .ini nu .txt
Credeam ca functioneaza la fel.
Ce probleme este: "In fisierele de .ini scriu informatii cu functia WritePrivateProfileString(). Eu am incercat cum mi-ai zis tu insa apare celebra eroare <<Debug assertion failed>>. Eu am facut in felul urmator:
CStdioFile f;
f.Open((LPCTSTR)csPath,CFile::modeWrite );
WritePrivateProfileString(); -> scrie la sectiunile din fisierul de ini si chiar merge asta scrie ca ramane in fisier dupa ce executa urmatoarea instructiune
f.WriteString("\r\n"); -> aici apare eroarea. si ma gandesc ca nu e buna aceasta functie pentru fisierele ini.
P.S. Sorry ca nu am specificat de prima data ca sunt de fapt fisiere de .ini, am crezut ca se lucreaza la fel ca si cu fisierele .txt.
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.
- Marius Bancila
- Fondator
- Posts: 2344
- Joined: 11 Jul 2007, 11:45
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Intrebare Visual c++
Pai tu amesteci capra cu varza. Tu deschizi fisierul, si porma scri cu alta functie in el, care la randul ei il mai deschide odata. 
Pai tinand cont ca e un fisier ini nu vad ce treaba ai sa-l formatezi cu linii goale...

Pai tinand cont ca e un fisier ini nu vad ce treaba ai sa-l formatezi cu linii goale...
- Ovidiu Cucu
- Fondator
- Posts: 3778
- Joined: 11 Jul 2007, 16:10
- Judet: Iaşi
- Location: Iasi
- Contact:
Re: Intrebare Visual c++
Mai multe lucruri de recomandat.
Nu vad care ar putea fi rostul, dar doar pentru demonstratie exemplul urmator adauga o "linie goala" la sfarsit.
- Nu folosi fisiere .ini; au fost pastrate doar pentru compatibilitate cu Win16. In locul lor poti pastra informatiile in registry.
- Daca totusi folosesti fisiere .ini atunci scrie/citeste din ele doar cu functiile dedicate: WriteProfileString, WritePrivateProfileString, etc.
- Daca totusi vrei sa dai cu barda in fisierele .ini, e bine sa ordonezi putin codul (scoate capra dintre verze...
).
Nu vad care ar putea fi rostul, dar doar pentru demonstratie exemplul urmator adauga o "linie goala" la sfarsit.
Code: Select all
LPCTSTR pszFileName = _T("d:\\temp\\Filename.ini");
BOOL bRet = ::WritePrivateProfileString(_T("AppName"),
_T("KeyName1"), _T("String1111"), pszFileName);
TRY
{
CStdioFile f(pszFileName, CFile::modeWrite|CFile::modeNoTruncate);
f.SeekToEnd();
f.WriteString(_T("\r\n"));
}
CATCH_ALL(e)
{
e->ReportError();
}
END_CATCH_ALL
Ovidiu
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Re: Intrebare Visual c++
(Probabil că aici este suficientă scrierea lui “\n”, pentru că “\r” este adăugat automat de sistem).Ovidiu Cucu wrote:Code: Select all
[...] f.WriteString(_T("\r\n")); [...]
- Ovidiu Cucu
- Fondator
- Posts: 3778
- Joined: 11 Jul 2007, 16:10
- Judet: Iaşi
- Location: Iasi
- Contact:
Re: Intrebare Visual c++
Ai dreptate.Viorel wrote:(Probabil că aici este suficientă scrierea lui “\n”, pentru că “\r” este adăugat automat de sistem).Ovidiu Cucu wrote:Code: Select all
[...] f.WriteString(_T("\r\n")); [...]
Probabil e ceva care n-a existat dintotdeauna, asa ca.... obisnuintza...

Thank you!
Ovidiu
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Follow http://twitter.com/#!/ovidiucucu
Weblog: http://codexpert.ro/blog/author/ovidiu-cucu/
Visit FAQ, Tips & Tricks
Re: Intrebare Visual c++
Trebuie sa i-l formatez pentru ca uneori trebuie sa ma uit in el sa caut informatii si daca e formatat le gasesc mai repede si e mai esteticMarius Bancila wrote:Pai tu amesteci capra cu varza. Tu deschizi fisierul, si porma scri cu alta functie in el, care la randul ei il mai deschide odata.
Pai tinand cont ca e un fisier ini nu vad ce treaba ai sa-l formatezi cu linii goale...

Insa am rezolvat problema si va multumesc pentru ajutor.
P.S. Azi m-am inscris si am postat o problema si deja am primit ajutor. Deci propria mea parere este: "Acesta este cel mai tare si mai fain forum din cate am vazut. Felicitari Marius si la toata echipa. Sunteti de vis. Nu regret ca v-am gasit si m-am inscris aici."
Daca ar fi sa exprim starea mea de spirit cam asta ar fi:

Cu stima,
Alin POPA
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.