2016-11-30 1 views
0

Ich muss eine Datei öffnen, um den Inhalt zu lesen und seinen Inhalt auf dem Bildschirm anzuzeigen. Dies sollte mithilfe der GIO-Dateiverarbeitung erfolgen. Ich gehe durch das Tutorial, aber als Praxis brauche ich den Code mit GIO für den folgenden c-Code. In c könnte das Programm sein:Dateibehandlung mit GIO

#include<stdio.h> 
#include<string.h> 
int main() 
{ 

    FILE *fp; 
    char temp[1000]; 
    if(fp=fopen("locations.txt", "r") != NULL) 
    { 
    fgets(temp, 1000, fp); 
    printf("%s", temp[1000]); 
    } 
fclose(fp); 
return 0; 
} 

Dank im Voraus.

+0

Was ist Ihr Problem? Was hast du versucht, es zu lösen? Was meinst du mit "Drucken am Terminal"? Bedeutet es "nicht in einer GUI"? Und wo sollte GTK ins Spiel kommen? Die Dateiverwaltung ist nicht mit dem GUI-Framework verbunden. – Gerhardh

+0

Ich sollte es mit GIO schreiben. Die G_FIle-Behandlung sollte statt normaler Dateibehandlungsoperationen durchgeführt werden. – sri

+0

Ich sollte den Inhalt auf dem Bildschirm drucken. – sri

Antwort

2

Dies ist eine grobe Annäherung an das genaue Verhalten, das Sie derzeit haben. Es könnte mit Fehlermeldungen verbessert werden, um eine Zeile zu einem Zeitpunkt zu lesen, usw.

#include <gio/gio.h> 

int main(void) 
{ 
    g_autoptr(GFile) file = g_file_new_for_path("locations.txt"); 
    g_autoptr(GFileInputStream) in = g_file_read(file, NULL, NULL); 
    if(!in) 
     return 1; 

    gssize read; 
    char temp[1000]; 

    while (TRUE) 
    { 
     read = g_input_stream_read(G_INPUT_STREAM(in), temp, G_N_ELEMENTS(temp) - 1, NULL, NULL); 
     if (read > 0) 
     { 
      temp[read] = '\0'; 
      g_print("%s", temp); 
     } 
     else if (read < 0) 
      return 1; 
     else 
     break; 
    } 

    return 0; 
} 
+0

Das sind die Fehler, die ich bekomme. Fehler: erwarteter Ausdruck vor 'GFile' g_autoptr (GFile) Datei = g_file_new_for_path ("locations.txt"); Fehler: erwartet ';' vor 'Datei' g_autoptr (GFile) Datei = g_file_new_for_path ("locations.txt"); Fehler: erwarteter Ausdruck vor 'GFileInputStream' g_autoptr (GFileInputStream) in = g_file_read (Datei, NULL, NULL); Fehler: erwartet '' vor 'in' g_autoptr (GFileInputStream) in = g_file_read (Datei, NULL, NULL)^ Fehler: 'in' nicht deklariert (erste in dieser Funktion) wenn – sri

+1

Sie müssen (in!) habe eine ziemlich alte Version von GLib. Sie können einfach das 'g_autoptr()' Zeug entfernen, aber Sie müssen 'g_object_unref()' dann manuell aufrufen. – TingPing

+0

Auch wenn ich g_autoptr() entfernen und g_object_unref() verwenden, bleiben die Fehler gleich. Wie kann ich den Code ändern, um #include anstelle von # include zu verwenden sri

0

Die Antwort auf meine Frage:

#include <gtk/gtk.h> 

int main(void) 
{ 
GFile *file = g_file_new_for_path("FINAL_SERVER_URLS.txt"); 

GFileInputStream *in = g_file_read(file, NULL, NULL); 
if(!in) 
    return 1; 

gssize read; 
gchar temp[1000]; 

while (TRUE) 
{ 
    read = g_input_stream_read(G_INPUT_STREAM(in), temp, G_N_ELEMENTS(temp) - 1, NULL, NULL); 
    if (read > 0) 
    { 
     temp[read] = '\0'; 
     g_print("%s", temp); 
    } 
    else if (read < 0) 
     return 1; 
    else 
    break; 
} 
//g_free(temp); 
g_object_unref(file); 
g_object_unref(in); 
    return 0; 
} 
+2

Dies ist nur eine Kopie von tinpings Antwort ohne g_autoptr (und mit nicht benötigtem gtk include) Recht? – jku

Verwandte Themen