Page 1 of 1

Intrebare Visual c++

Posted: 30 May 2008, 11:35
by Popa Alin
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.

Re: Intrebare Visual c++

Posted: 30 May 2008, 12:16
by Ovidiu Cucu
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".

Re: Intrebare Visual c++

Posted: 30 May 2008, 12:51
by Popa Alin
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.

Re: Intrebare Visual c++

Posted: 30 May 2008, 15:02
by Marius Bancila
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...

Re: Intrebare Visual c++

Posted: 30 May 2008, 15:34
by Ovidiu Cucu
Mai multe lucruri de recomandat.
  • 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

Re: Intrebare Visual c++

Posted: 30 May 2008, 16:54
by Viorel
Ovidiu Cucu wrote:

Code: Select all

[...]
f.WriteString(_T("\r\n"));
[...]
(Probabil că aici este suficientă scrierea lui “\n”, pentru că “\r” este adăugat automat de sistem).

Re: Intrebare Visual c++

Posted: 30 May 2008, 17:13
by Ovidiu Cucu
Viorel wrote:
Ovidiu Cucu wrote:

Code: Select all

[...]
f.WriteString(_T("\r\n"));
[...]
(Probabil că aici este suficientă scrierea lui “\n”, pentru că “\r” este adăugat automat de sistem).
Ai dreptate.
Probabil e ceva care n-a existat dintotdeauna, asa ca.... obisnuintza... ;)

Thank you!

Re: Intrebare Visual c++

Posted: 30 May 2008, 17:32
by Popa Alin
Marius 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...
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 estetic ;)

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: :yahoo:

Cu stima,
Alin POPA