Veröffentlicht 10. April 200619 j Habe mal wieder ein Problem zu dem ich keine Lösung finde: Ich habe zB folgende Ausgangssituation: string zeile; ifstream datei("datei.txt"); while(!datei.eof() ) { getline(datei, zeile); }; Schön... jetzt bin ich am Ende der Datei... ich will nun aber wieder an den Anfang springen... wie bekomm ich das gebacken, ich such schon seit ner Stunde, und finde nirgendwo ne passende Funktion...
11. April 200619 j Mit seekg kannst du die Position des Lesezeigers in der Datei ändern. So setzt du ihn an den Anfang: datei.seekg( 0, ios_base::beg ); Dann kannst du aber immer noch nicht viel damit machen, weil das Fehlerbit für das Lesen über das Dateiende hinaus gesetzt ist. Die Fehlerbits kannst du aber mit datei.clear(); zurücksetzen. Übrigens ist deine Leseschleife möglicherweise fehlerhaft, je nachdem, was du mit der eingelesenen Zeile machst. eof liefert erst dann true, wenn getline schon einmal fehlgeschlagen ist. Du kannst aber auch getline selbst in der Schleifenbedingung benutzen: while(getline(datei, zeile)) oder while(!getline(datei, zeile).eof()) Beide Beispiele nutzen die Tatsache, dass std::getline eine Referenz auf das Stream-Objekt zurückgibt. Das erste Beispiel nutzt zudem noch aus, dass der Stream selbst als Bedingung genutzt werden kann. Effektiv liefert das true, wenn keines der Fehlerbits gesetzt ist. Das zweite Beispiel testet natürlich nur auf eof.
11. April 200619 j Ich bin einfach mal so frech und hänge noch ne Frage hintendran: Gibt es eine Funktion die eine Textdatei im Windows-Editor öffnet? Ich will mittels einem Menüeintrag die Readme zu meinem Prog anzeigen, finde aber nix dazu...
11. April 200619 j #define FULL_PATH_README //hier Pfad zur readme ShellExecute(handle, "open", "notepad.exe", FULL_PATH_README, getenv("windir"), 0 ); einfach Notepad starten und als Parameter den vollen Pfad zur Readme (Dir + File) angeben.
11. April 200619 j Kann man diesen absoluten Pfad auch irgendwie relativ zum momentanen Programmverzeichniss angeben?
11. April 200619 j Wenn ich einfach "readme.txt" übergebe passiert gar nix... Was ist eigentlich mit handle in diesem Fall gemeint? Was für ein handle?
11. April 200619 j Also... in ANSI C gibt es dafür Funktionen, in ISO C++ nicht. Aber kannst die Funktionen ja trotzdem benutzten, ich muss nur bisschen klug*******ern. Unter Linux (nur der Vollständigkeit halber) und Windows ist das aktuelle Verzeichnis das Verzeichnis, in dem die ausführbare Datei liegt. Solange also nicht irgendwo in deinem Programm die Funktion chdir() benutzt wird, kannst du das Verzeichnis der ausführbaren Datei mit dem des aktuellen Verzeichnises gleichsetzen. Aktuelles Verzeichnis auslesen: Einfach die Funktion _getcwd() benutzen. char *_getcwd( char *buffer, int maxlen ); oder wchar_t *_wgetcwd( wchar_t *buffer, int maxlen ); Der Return ist einfach nur ein Zeiger auf den Puffer, den man übergibt. Das koppelst du halt mit deiner readme... zu dem Handle: Handle to the owner window used for displaying a user interface (UI) or error messages. This value can be NULL if the operation is not associated with a window.
11. April 200619 j Selbst wenn ich den absoluten Pfad angebe passiert einfach garnichts... Habe alles genau so gemacht wie beschrieben... ?!
11. April 200619 j Der erste Schritt bei der Fehlersuche ist die Prüfung der Rückgabewerte. Also, was gibt ShellExecute zurück?
14. April 200619 j Sorry das ich mich erst so spät zurückmelde... Der Parameter SW_SHOWMAXIMIZED war die Lösung... Eigentlich auch logisch... Danke nochmal an alle....
18. April 200619 j Nochmal ich Das mit dem relativen Pfad funktioniert nicht... Die Datei wird immer in C: gesucht... WARUM?
18. April 200619 j Vermutlich, weil ShellExecute nicht mit relativen Pfaden zurechtkommt. Wozu ist dein Pfad denn relativ? Zum Pfad deines Programms?
18. April 200619 j Ja... Ich müsste einfach nur ein Textdokument im selben Ordner wie meine .exe Datei aufrufen...
18. April 200619 j Dann hol dir mit GetModuleFileName den Pfad zu deiner Exe, schneid mit PathRemoveFileSpec den Dateinamen ab und häng den Namen der Textdatei an.
18. April 200619 j Danke, das hilft Falls das hier noch jemand liest: Für die 2te Funktion braucht man die Lib shlwapi.lib und den header shlwapi.h .
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.