如何将GTKTextBuffer的内容保存到文件

如何将GTKTextBuffer的内容保存到文件,gtk,nxt,lego,anjuta,Gtk,Nxt,Lego,Anjuta,我正在Anjuta的Ubuntu12.04上用C和GTK编写一个程序。它是nbc(乐高NXT编译器)的图形界面。我有一个GTKTextView。现在我想将textview的内容保存到一个文件中,该文件可以由GTKFileChooser选择。现在我不知道如何从TextView获取文本并将其写入文件。如何操作?首先,使用gtk_text_view\u get_buffer()从GtkTextView获取GtkTextBuffer。然后从缓冲区获取开始和结束GTKTextiter,用于获取缓冲区的文本

我正在Anjuta的Ubuntu12.04上用C和GTK编写一个程序。它是nbc(乐高NXT编译器)的图形界面。我有一个GTKTextView。现在我想将textview的内容保存到一个文件中,该文件可以由GTKFileChooser选择。现在我不知道如何从TextView获取文本并将其写入文件。如何操作?

首先,使用
gtk_text_view\u get_buffer()
GtkTextView
获取
GtkTextBuffer
。然后从缓冲区获取开始和结束GTKTextiter,用于获取缓冲区的文本。最后,使用您选择的API将该文本写入文件,但是,我建议使用
Gio
。以下是我以前的教程中的一个片段:

gtk小部件设置敏感(文本视图,错误);
buffer=gtk_text_view_get_buffer(gtk_text_view(编辑器->文本视图));
gtk_text_buffer_get_start_iter(缓冲区和启动);
gtk_text_buffer_get_end_iter(缓冲区和结束);
text=gtk_text_buffer_get_text(buffer,&start,&end,FALSE);
gtk_text_buffer_set_modified(buffer,FALSE);
gtk_widget_set_sensitive(编辑器->文本视图,TRUE);
/*将文件内容设置为缓冲区中的文本*/
如果(文件名!=NULL)
结果=g_文件\u集合\u内容(文件名、文本、-1和错误);
其他的
结果=g_文件\u设置内容(编辑器->文件名,文本,-1,&err);
如果(结果==FALSE)
{
/*保存文件时出错,向用户显示消息*/
错误消息(错误->消息);
g_无错误(err);
}        
g_自由(文本);
查看以下API文档:


  • 文本视图1上的数据点。

    顺便说一句,
    结果
    是一个gboolean,
    缓冲区
    是一个GtkTextBuffer,
    错误
    是一个GError,
    开始
    /
    结束
    是GtkTextIter。它取自以下代码:我在程序中实现了该代码,但它崩溃了,错误代码为11(分段错误)。发生了什么?这是我的函数:你能把你实际使用的函数粘贴进去吗?我知道了!非常感谢!此解决方案是否也考虑了标签?如果我使用标记并希望将富格文本存储到文件中,该怎么办?
    void on_toolbutton3_clicked(GtkToolButton *toolbutton, gpointer data)
    {   
    
    
        GtkWidget *dialog;
        dialog = gtk_file_chooser_dialog_new ("Abspeichern...",
                          NULL,
                          GTK_FILE_CHOOSER_ACTION_SAVE,
                          GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                          GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                          NULL);
        if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
        {
        char *filename;
        char *text;
        GtkTextIter *start;
        GtkTextIter *end;
        gboolean result;
        GError *err;
        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
        gtk_widget_set_sensitive (data, FALSE);
        savebuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data));
    gtk_text_buffer_get_start_iter (savebuffer, &start);
    gtk_text_buffer_get_end_iter (savebuffer, &end);
    text = gtk_text_buffer_get_text (savebuffer, &start, &end, FALSE);       
    gtk_text_buffer_set_modified (savebuffer, FALSE);
    gtk_widget_set_sensitive (data, TRUE);
    
    /* set the contents of the file to the text from the buffer */
    if (filename != NULL)        
        result = g_file_set_contents (filename, text, -1, &err);
    else
        result = g_file_set_contents (filename, text, -1, &err);
    
    if (result == FALSE)
    {
        /* error saving file, show message to user */
    
    }        
    
    g_free (text); 
        }
        gtk_widget_destroy (dialog);
    
    }