Jonsc1 Geschrieben 10. April 2006 Geschrieben 10. April 2006 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... Zitieren
Klotzkopp Geschrieben 11. April 2006 Geschrieben 11. April 2006 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. Zitieren
Jonsc1 Geschrieben 11. April 2006 Autor Geschrieben 11. April 2006 Danke für die ausführliche Antwort... War genau das was ich gebraucht habe... Zitieren
Jonsc1 Geschrieben 11. April 2006 Autor Geschrieben 11. April 2006 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... Zitieren
TDM Geschrieben 11. April 2006 Geschrieben 11. April 2006 #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. Zitieren
Jonsc1 Geschrieben 11. April 2006 Autor Geschrieben 11. April 2006 Kann man diesen absoluten Pfad auch irgendwie relativ zum momentanen Programmverzeichniss angeben? Zitieren
TDM Geschrieben 11. April 2006 Geschrieben 11. April 2006 relativ zur Exe müsste gehen... Musst du mal probieren Zitieren
Jonsc1 Geschrieben 11. April 2006 Autor Geschrieben 11. April 2006 Wenn ich einfach "readme.txt" übergebe passiert gar nix... Was ist eigentlich mit handle in diesem Fall gemeint? Was für ein handle? Zitieren
TDM Geschrieben 11. April 2006 Geschrieben 11. April 2006 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. Zitieren
Jonsc1 Geschrieben 11. April 2006 Autor Geschrieben 11. April 2006 Selbst wenn ich den absoluten Pfad angebe passiert einfach garnichts... Habe alles genau so gemacht wie beschrieben... ?! Zitieren
TDM Geschrieben 11. April 2006 Geschrieben 11. April 2006 probier mal als letzten parameter SW_SHOWMAXIMIZED Zitieren
Klotzkopp Geschrieben 11. April 2006 Geschrieben 11. April 2006 Der erste Schritt bei der Fehlersuche ist die Prüfung der Rückgabewerte. Also, was gibt ShellExecute zurück? Zitieren
Jonsc1 Geschrieben 14. April 2006 Autor Geschrieben 14. April 2006 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.... Zitieren
Jonsc1 Geschrieben 18. April 2006 Autor Geschrieben 18. April 2006 Nochmal ich Das mit dem relativen Pfad funktioniert nicht... Die Datei wird immer in C: gesucht... WARUM? Zitieren
Klotzkopp Geschrieben 18. April 2006 Geschrieben 18. April 2006 Vermutlich, weil ShellExecute nicht mit relativen Pfaden zurechtkommt. Wozu ist dein Pfad denn relativ? Zum Pfad deines Programms? Zitieren
Jonsc1 Geschrieben 18. April 2006 Autor Geschrieben 18. April 2006 Ja... Ich müsste einfach nur ein Textdokument im selben Ordner wie meine .exe Datei aufrufen... Zitieren
Klotzkopp Geschrieben 18. April 2006 Geschrieben 18. April 2006 Dann hol dir mit GetModuleFileName den Pfad zu deiner Exe, schneid mit PathRemoveFileSpec den Dateinamen ab und häng den Namen der Textdatei an. Zitieren
Jonsc1 Geschrieben 18. April 2006 Autor Geschrieben 18. April 2006 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 . Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.