Avatar billede bjering Nybegynder
09. februar 2004 - 05:50 Der er 14 kommentarer og
1 løsning

Sende en tekst streng til en text fil.

Jeg har en MFC application (i visual c++), den har en exit msgbox osv, jeg har sat og rodet med at få den til at skrive en linie i en text fil når den lukker.

det vil bare IKKE virke uanset hvad jeg gør (jeg er nok en smule noobie til det her)

Anyways, koden til exit er her

void CLineageUpdaterDlg::OnClose()
{
  int nResult;

  nResult = MessageBox("Are you sure you want to exit?", "Quit?",
                      MB_YESNO | MB_ICONQUESTION);
  if (nResult == IDYES)
    EndDialog(0);
}

okay, når man så klikker på YES, så lukker den programmet, men hvordan får jeg den til at skrive en linie i en fil der hedder logdata.txt, den skulle gerne skrive f.eks

"Update Server Closed."

Jeg har rooodet rundt med alle de excempler andre har fået her, men intet syntes at virke.
(den kommer nu ikke med errors sådan rigtig, men den skriver bare intet i filen).

så nu spørger jeg de kloge hoveder, nogen der ved det ?

MVH

Bo.
Avatar billede bjering Nybegynder
09. februar 2004 - 05:51 #1
åh ja, den skal self skifte linie hvergang \n
Avatar billede arne_v Ekspert
09. februar 2004 - 07:15 #2
Du åbner filen i append mode, skriver linien og lukker filen igen.
Avatar billede arne_v Ekspert
09. februar 2004 - 07:17 #3
ofstream f("logdata.txt", ios::out | ios::append);
f << "Dette er en test" << endl;
f.close();
Avatar billede bjering Nybegynder
09. februar 2004 - 09:44 #4
ændrede det til

        ofstream f("logdata.txt", ios::out | ios::app);
        f << "Dette er en test" << endl;
        f.close()

nu er jeg nede på 3 fejl jeg ikke liiige kan finde ud af :

--------------------Configuration: Lineage Updater - Win32 Debug--------------------
Compiling...
Lineage UpdaterDlg.cpp
D:\c++ projects\lineage\Update Server\Lineage UpdaterDlg.cpp(194) : error C2065: 'f' : undeclared identifier
D:\c++ projects\lineage\Update Server\Lineage UpdaterDlg.cpp(194) : error C2297: '<<' : illegal, right operand has type 'char [17]'
D:\c++ projects\lineage\Update Server\Lineage UpdaterDlg.cpp(195) : error C2228: left of '.close' must have class/struct/union type
Error executing cl.exe.
Creating browse info file...

Lineage Updater.exe - 3 error(s), 0 warning(s)
Avatar billede bjering Nybegynder
09. februar 2004 - 09:46 #5
havde 5 fejl med ios::append istedet for ios::app (ifølge microsofts msdn).

ios::app  The function performs a seek to the end of file. When new bytes are written to the file, they are always appended to the end, even if the position is moved with the ostream::seekp function.
Avatar billede bjering Nybegynder
09. februar 2004 - 09:47 #6
jeg fatter ikke lige << fejlen, den får jeg altid når jeg bruger <<..

f identifieren er ved pga << fejlen

close fejlen kan jeg ikke lige sætte min finger på (er som sagt lidt noobie)
Avatar billede bjering Nybegynder
09. februar 2004 - 09:48 #7
btw koden ser sådan her ud nu (rigtigt?)

void CLineageUpdaterDlg::OnClose()
{
  int nResult;

  nResult = MessageBox("Are you sure you want to exit?", "Quit?",
                      MB_YESNO | MB_ICONQUESTION);
  if (nResult == IDYES)

        ofstream f("logdata.txt", ios::out | ios::app);
        f << "Dette er en test" << endl;
        f.close();

      EndDialog(0);
}
Avatar billede bjering Nybegynder
09. februar 2004 - 11:42 #8
btw jeg har #include <fstream.h> i min fil.
Avatar billede arne_v Ekspert
09. februar 2004 - 12:31 #9
Nu er jeg ikke skrap til MFC, så jeg kan ikke udtale mig om konteksten, men
umiddelbart ser det OK ud.
Avatar billede bjering Nybegynder
09. februar 2004 - 13:19 #10
mja det virker bare ikke...

men jeg prøvede lige at adde en linie til min .h fil

class CLineageUpdaterDlg : public CDialog
{
// Construction
private:
    fstream f;

public:
    virtual void OnCancel();
    CLineageUpdaterDlg(CWnd* pParent = NULL);    // standard constructor

// Dialog Data
    //{{AFX_DATA(CLineageUpdaterDlg)
    enum { IDD = IDD_LINEAGEUPDATER_DIALOG };
    CButton    m_ExitProgram;
    CListBox    m_ListData;
    CString    m_strMessage;
    //}}AFX_DATA

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CLineageUpdaterDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:
    HICON m_hIcon;

    // Generated message map functions
    //{{AFX_MSG(CLineageUpdaterDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnClose();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

jeg addede

private:
        fstream f;

nu laver den ingen fejl, men skriver intet til filen.
Avatar billede arne_v Ekspert
09. februar 2004 - 13:53 #11
Jeg er lidt lost.

Et simpelt eksmepel som:

#include <fstream>

using namespace std;

int main()
{
    ofstream f("app.txt", ios::out | ios::app);
    f << "Dette er en test" << endl;
    f.close();
    return 0;
}

virker fint hos mig.
Avatar billede bjering Nybegynder
09. februar 2004 - 14:04 #12
mjo, virker nok fint i en console app, men mm, ikke i en MFC app..

jeg skal declare den i class først for ellers får du en f class blablabla not declared blabla..
jeg kan jo ikke køre den some int main() da den skal kun køre en gang når man lukker programmet så den skriver "program lukket" en gang i log filen.

jeg zipper lige det hele så kan du jo selv se det.

tjeck under "Lineage UpdaterDlg.h" omkring i toppen og under "Lineage UpdaterDlg.cpp" helt i bunden af filen (det er det der sker når man klikker på Exit knappen.
Avatar billede bjering Nybegynder
09. februar 2004 - 14:06 #13
Avatar billede bjering Nybegynder
12. februar 2004 - 05:15 #14
nm så...
Avatar billede arne_v Ekspert
12. februar 2004 - 22:54 #15
Sorry - jeg fik aldrig email om linket (Ekspertens email har været
lidt ustabil på det sidste).

Efter at have kigget 30 sekunder på koden vil jeg ihvertfakd sige at:

void CLineageUpdaterDlg::OnClose()
{
  int nResult;

  nResult = MessageBox("Are you sure you want to exit?", "Quit?",
                      MB_YESNO | MB_ICONQUESTION);
  if (nResult == IDYES)

  ofstream f("logfile.txt", ios::out | ios::app);
  f << "Dette er en test" << endl;
  f.close();

      EndDialog(0);
}

må mangle nogen parenteser.

Prøv:

void CLineageUpdaterDlg::OnClose()
{
  int nResult;

  nResult = MessageBox("Are you sure you want to exit?", "Quit?",
                      MB_YESNO | MB_ICONQUESTION);
  if (nResult == IDYES)
{
  ofstream f("logfile.txt", ios::out | ios::app);
  f << "Dette er en test" << endl;
  f.close();
}
      EndDialog(0);
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester