[gelöst] Datei auslesen

Alles rund um die Programmierung mit Qt
Antworten
imbiss
Beiträge: 20
Registriert: 17. Oktober 2005 20:04

[gelöst] Datei auslesen

Beitrag 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
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag 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)
}
Glaube an eine Lösung, nur dann kannst du auch eine finden.
mozart
Beiträge: 17
Registriert: 27. September 2005 22:01
Wohnort: Solingen

hab's so gemacht

Beitrag 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
MfG Rene
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: hab's so gemacht

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
imbiss
Beiträge: 20
Registriert: 17. Oktober 2005 20:04

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
imbiss
Beiträge: 20
Registriert: 17. Oktober 2005 20:04

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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());
	}
}
imbiss
Beiträge: 20
Registriert: 17. Oktober 2005 20:04

Beitrag 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...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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?
imbiss
Beiträge: 20
Registriert: 17. Oktober 2005 20:04

Beitrag 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());
}
}
}
imbiss
Beiträge: 20
Registriert: 17. Oktober 2005 20:04

Beitrag 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
Antworten