Seite 1 von 1
[gelöst] Datei auslesen
Verfasst: 17. Oktober 2005 20:21
von imbiss
Grüße Euch
Ich versuche seit Tagen, die /etc/fstab auszulesen und in einem textedit auszugeben um sie dort zu bearbeiten und wieder zu speichern(überschreiben) leider ohne erfolg.
Habe gegoooogelt und hilfe gelesen,komme einfach nicht weiter.
Wie kann man Textdateien bearbeiten, mit Qfile kriege ich das nicht hin.
Vielen Dank im vorraus.
MFG
Verfasst: 17. Oktober 2005 20:42
von Esleborn
das beste ist wohl die Datei zunächst zum lesen zu öffnen, dann mit einem QTextStream auszulesen und auzugeben. Anschließend die Datei wieder zu schließen. Wenn gespeichert werden soll wiederrum die Datei öffnen, dieses mal nur zum schreiben, wiederrum einen QTextStream auf diese Datei erstellen und mit Hilfe von diesem den Inhalt des Textwidgets abzuspeichern. Anschließend sollte die Datei wieder geschlossen werden.
Wenn das nicht hilft wirst du wohl dein Problem etwas genau beschreiben müssen, und sagen müssen wie du auf was zugreifst (und vllt sagen müssen, welche Qt Version du verwendest).
Code: Alles auswählen
{
QFile file ( <Dateiname> );
file.open ( QIODevice::ReadOnly );
QTextStream stream ( &file );
// streamen (lesen)
file.close ( );
}
//bearbeiten
{
QFile file ( <Dateiname> );
file.open ( QIODevice::WriteOnly );
QTextStream stream ( &file );
// streamen (schreiben)
}
hab's so gemacht
Verfasst: 17. Oktober 2005 20:45
von mozart
zum Einlesen:
-----------------
QTextEdit *NoteEdit = new QTextEdit();
QFile f ("file.txt");
f.open (QIODevice::ReadOnly);
QTextStream textStream (&f);
NoteEdit->setText (textStream.read());
----------------
zum Auslesen:
----------------
QFile f ("file.txt");
QTextStream textStream (&f);
f.open (QIODevice::WriteOnly | QIODevice::Truncate);
textStream << NoteEdit->text ();
f.close ();
--------------------
das verwende ich oft so
Re: hab's so gemacht
Verfasst: 18. Oktober 2005 07:29
von macman
mozart hat geschrieben:NoteEdit->setText (textStream.read());
QTextStream hat kein read. readAll oder readLine, aber nicht read. Sicher das Du das oft so benutzt? Gib doch mal ein bißchen Code, so können wir nur raten was verkehrt sein könnte.
Verfasst: 18. Oktober 2005 08:39
von FlorianBecker
Das ist so wie so zu umständlich.
Datei beim darstellen gar nicht mehr in einen QTextStream packen, mit einem ByteArray und readAll() geht das viel einfacher.
Verfasst: 18. Oktober 2005 09:36
von imbiss
Erstmal vielen Dank für die Antworten.
Ich benutze Qt 3.3.4 und möchte ein Widget erstellen in dem sich ein TextEdit feld mit einem pushButton zum öffnen und ein Button zum speichern befindet. Wenn ich den öffnen Button drücke, soll im TextEdit feld die /etc/fstab ausgegeben werden.
Habe ich die /etc/fstab geändert möchte ich nur noch den speichern Button drücken damit die alte Datei überschrieben wird.
Nochmals vielen Dank für Eure mühe.
MFG
Verfasst: 18. Oktober 2005 09:58
von macman
imbiss hat geschrieben:Ich benutze Qt 3.3.4
Aaaaaahjaa, dann also read() und nicht readAll(). Jetzt wissen wir aber immer noch nicht wo es hängt. Darfst Du die Datei überhaupt lesen und kannst Du sie öffnen oder schlägt das schon fehl? Gib doch mal endlich ein Stückchen Code, meine Glaskugel will heut nicht.
Verfasst: 18. Oktober 2005 10:12
von imbiss
void Form1::newSlot()
{
QFile file ( "/etc/fstab" );
file.open ( QIODevice| IO_ReadOnly );
QTextStream stream ( &file );
lineEdit1 -> stream;
file.close ( );
}
Dann die fehler meldung bei make
form1.ui.h: In member function `virtual void Form1::newSlot()':
form1.ui.h:106: error: `QFile' undeclared (first use this function)
form1.ui.h:106: error: (Each undeclared identifier is reported only once for
each function it appears in.)
form1.ui.h:106: error: Fehler beim Parsen before `(' token
form1.ui.h:107: error: `file' undeclared (first use this function)
form1.ui.h:107: error: Fehler beim Parsen before `|' token
form1.ui.h:109: error: 'class QLineEdit' has no member named 'stream'
make: *** [.obj/form1.o] Fehler 1
Verfasst: 18. Oktober 2005 10:22
von macman
imbiss hat geschrieben:form1.ui.h:106: error: `QFile' undeclared (first use this function)
Das sieht nach einem fehlenden Include aus. Und wenn Du den drin hast, probier es mal hiermit.
Code: Alles auswählen
QFile file ( "/etc/fstab" );
if (file.exists())
{
if (file.open(IO_ReadOnly))
{
QTextStream stream(&file);
lineEdit1->setText(stream->read());
}
}
Verfasst: 18. Oktober 2005 10:38
von imbiss
main.cpp
#include <qapplication.h>
#include <qfile.h>
#include <qtextstream.h>
#include "form1.h"
int main( int argc, char ** argv )
{
QApplication a( argc, argv );
Form1 w;
w.show();
a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
return a.exec();
}
fehlermeldung
form1.ui.h: In member function `virtual void Form1::newSlot()':
form1.ui.h:16: error: `QFile' undeclared (first use this function)
form1.ui.h:16: error: (Each undeclared identifier is reported only once for
each function it appears in.)
form1.ui.h:16: error: Fehler beim Parsen before `(' token
form1.ui.h:17: error: `file' undeclared (first use this function)
form1.ui.h:22: error: `lineEdit1' undeclared (first use this function)
form1.ui.h:22: error: base operand of `->' has non-pointer type `QTextStream'
make: *** [.obj/form1.o] Fehler 1
hoffe ich nerve nicht, aber nach 1woche habe ich langsam graue haare...
Verfasst: 18. Oktober 2005 11:19
von macman
imbiss hat geschrieben:hoffe ich nerve nicht, aber nach 1woche habe ich langsam graue haare...
Was nervt sind mangelnde und falsche Informationen. Die Fehlermeldungen beziehen sich auf die form1.ui.h und Du postet die main.cpp. In der form1.ui.h fehlt wahrscheinlich das include. Ist dein Projekt schon so groß oder so geheim oder warum packst Du es nicht einfach und lädst es hoch?
Verfasst: 18. Oktober 2005 11:51
von imbiss
Sorry
/****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you want to add, delete, or rename functions or slots, use
** Qt Designer to update this file, preserving your code.
**
** You should not define a constructor or destructor in this file.
** Instead, write your code in functions called init() and destroy().
** These will automatically be called by the form's constructor and
** destructor.
*****************************************************************************/
void Form1::newSlot()
{
QFile file ( "/etc/fstab" );
if (file.exists())
{
if (file.open(IO_ReadOnly))
{
QTextStream stream(&file);
lineEdit1->setText(stream->read());
}
}
}
Verfasst: 18. Oktober 2005 12:47
von imbiss
Danke macman für den tip und deine Zeit,es klappt.
Habe kein Projekt will nur Lernen.
Jetzt werde ich versuchen mir eine bestimmte zeile anzeigen zu lassen.
Ist für euch wahrscheinlich ein kinderspiel, aber learning by doing.
nochmals Danke..
MFG