none
Visual C++ Entwicklerbuch Problem

    Frage

  • Hallo zusammen.

    Ich lerne gerade Programmieren mit dem Buch Visual C++ Entwicklerbuch.

    Mein Problem ist die Kontaktverwaltung von Kapitel 19.

    Ich habe sie erstellt und führe sie aus und gebe Kontakte ein die in einer Textdatei gespeichert werden sollen.

    Wenn ich sie dann wieder aufrufen möchte sind sie nicht da.

    Auch wenn ich in dem Verzeichnis schaue ist da keine Textdatei.

    Habe auch von der Microsoft Press Seite das Projekt geladen weil ich dachte, dass ich irgendwo einen Fehler habe aber da ist das gleiche.

    Ich arbeite mit Windows 7 64bit. Kann da das Problem liegen? Weil es ja nicht wirklich in dem angezeigten Verzeichnis speichert sondern in einem versteckten?

    Bin am verzweifeln.

    Für die Hilfe schon mal danke

    Dienstag, 23. Juli 2013 04:44

Antworten

Alle Antworten

  • Hi,
    wie startest Du die Ausführung des Programmen und in welchem Verzeichnis schaust Du denn nach? Lass Dir mal im Programmablauf den Verzeichnispfad ausgeben.

    --
    Peter

    Dienstag, 23. Juli 2013 06:30
  • Hallo,

    ein kurzer Blick in den Quellcode zeigt leider einige Schwächen[1]:

    Die "kontakte.txt" wird erst beim Schließen der Formulars angelegt, richtiger wäre beim Betätigen des "Kontakte speichern" Schaltfläche. Somit wird ein Laden anfangs fehlschlagen und später den vorherigen Stand anzeigen.

    Zudem wird keine Pfadangabe verwendet, womit die Datei im aktuellen Verzeichnis landet - was sich durchaus ändern kann - wenn auch bei diesem Mini-Ding eher nicht ;).

    Besser wäre hier einen Pfad über Path.Combine zu bilden und das in eine eine Eigenschaft zu verpacken:

        property String^ Kontaktedatei
        {
          String^ get() 
          { 
                if (String::IsNullOrEmpty(_kontaktedatei))
                    // Eigene Dateien als Basis verwenden
                    _kontaktedatei = Path::Combine(Environment::GetFolderPath( Environment::SpecialFolder::MyDocuments), "Kontakte.txt");
                return _kontaktedatei; 
          }
          void set(String^ value) { _kontaktedatei = value; }
        }

    Hier wird das Benutzerverzeichnis "Eigene Dokumente" als Standard verwendet, wo es eigentlich hingehört. Die Eigenschaft verwendest Du als Parameter beim StreamReader und StreamWriter.

    Wenn das funktioniert solltest Du den Punkt 1. mal korrigieren, damit etwas Lerneffekt dabei herum kommt: Lese die Datei beim Programmstart ein (je nach Variante in Array, ArrayList List usw.), damit die Anzeige aktuell ist. Und speichere die Werte beim Drücken auf das Köpfchen - damit die Daten nicht verschwunden sind, wenn es danach kracht ;)

    Die Methoden fürs Laden und Speichern gehören sowieso mehr in die Kontakte Klasse als in das Formular.

    Gruß Elmar

    [1] abseits davon:  C++/CLI und WinForms macht keinen Sinn

    Dienstag, 23. Juli 2013 09:56
  • Ok. Werde ich mal ausprobieren, wenn hier bei uns in Hamburg das I-Net wieder geht. Mit meinem Handy Mobil Hotspot dauert das lesen hier viel zu lange.

    Wenn das "C++/CLI und WinForms macht keinen Sinn" eh keinen Sinn macht wie sollte man so was angehen und welches Buch zum lernen macht dann wirklich Sinn?

    Wie würdet ihr ein Programm angehen mit dem man Name, Adresse, Geräte sowie deren Seriennummern auf Knopfdruck in eine Tabelle oder Datenbank speichern kann und gleichzeitig auf einem drucker ausgibt

    Mittwoch, 24. Juli 2013 04:10
  • Hallo,

    ich habe mir noch mal eine Handvoll dieser "Kapitel" angeschaut:
    Das Niveau ist erschreckend niedrig bis zum Schluss.

    Für eine klassische Datenbank-Anwendung wechsele zu C#.
    Ein gutes Buch - weniger eine Sprach- als eine .NET Referenz - wäre: Albahari - C# in a Nutshell 5.0.
    Für Programmieranfänger evtl.: http://openbook.galileocomputing.de/visual_csharp_2012/

    Auf der anderen Seite findest Du auch tonnenweise Anleitungen im Internet (C++/CLR kommt wiederum quasi nicht vor).

    Gruß Elmar


    Mittwoch, 24. Juli 2013 07:16
  • Hallo,

    ich habe mir noch mal eine Handvoll dieser "Kapitel" angeschaut: 
    Das Niveau ist erschreckend niedrig bis zum Schluss.

    Für eine klassische Datenbank-Anwendung wechsele zu C#.
    Ein gutes Buch - weniger eine Sprach- als eine .NET Referenz - wäre: Albahari - C# in a Nutshell 5.0. 
    Für Programmieranfänger evtl.:

    Auf der anderen Seite findest Du auch tonnenweise Anleitungen im Internet (C++/CLR kommt wiederum quasi nicht vor).

    Gruß Elmar

    OK. Wenn ich dann mein Projekt weiterverfolge werde ich wohl zu C# wechseln. Aber da mein Programm bis ende nächsten Monats stehen muss werde ich erst mal mit C++ weiter machen. Ich dachte eigentlich, dass man in C++ super Programme schreiben kann.

    Wo liegt denn genau der Unterschied zwischen den beiden?

    Donnerstag, 25. Juli 2013 04:46
  • Hallo,

    Wechsele jetzt, wenn Du - wie das Buch vermuten lässt - noch ganz am Anfang stehst.

    Lies Dir Jochen Kalmbachs Blog Artikel durch und Du solltest erkennen, dass C++/CLR dafür einfach nicht gedacht ist.

    Visual C# ist eine "moderne" aufgeräumte Sprache, deren Anfangsgründe man relativ schnell erlernen kann.

    Natürlich kann man mit C++ tolle Programme schreiben, nur von Windows Forms/CLR sollte man die Finger lassen. Wenn man die Alternativen zur GUI Entwicklung wie MFC / Qt / wxWidgets usw. betrachtet, so sind die Einarbeitungszeiten deutlich länger - und der nächste Monat ist vermutlich schon rum ;) Und dann kommt da noch die Datenbank ...

    Gruß Elmar


    • Bearbeitet Elmar BoyeMVP Donnerstag, 25. Juli 2013 09:14 Format
    Donnerstag, 25. Juli 2013 09:13
  • So habe mir den Blog mal durchgelesen und werde nun auf C# umsteigen. Es macht keinen Sinn etwas zu schreiben bei dem man dann nicht so einfach weiter machen kann.

    Danke Euch allen

    Freitag, 26. Juli 2013 08:36