2012-06-18 3 views
4

나는 Anjuta의 Ubuntu 12.04에서 C와 GTK 프로그램을 쓰고있다. nbc (Lego NXT Compiler)의 그래픽 인터페이스입니다. 나는 GTKTextView있다. 이제 텍스트 뷰의 내용을 GTKFileChooser가 선택할 수있는 파일에 저장하려고합니다. 이제 TextView에서 텍스트를 가져 와서 파일에 쓰는 방법을 모르겠습니다. 어떻게해야합니까?GTKTextBuffer의 내용을 파일에 저장하는 방법

답변

4

우선 gtk_text_view_get_buffer()을 사용하여 GtkTextView에서 GtkTextBuffer을 가져옵니다. 그런 다음 버퍼의 텍스트를 가져 오는 데 사용할 버퍼에서 시작 및 끝 GtkTextIters을 가져옵니다. 마지막으로, 원하는 API를 사용하여 텍스트를 파일에 씁니다. 그러나 나는 Gio을 권장합니다.

gtk_widget_set_sensitive (text_view, FALSE); 
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editor->text_view)); 
gtk_text_buffer_get_start_iter (buffer, &start); 
gtk_text_buffer_get_end_iter (buffer, &end); 
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);  
gtk_text_buffer_set_modified (buffer, FALSE); 
gtk_widget_set_sensitive (editor->text_view, 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 (editor->filename, text, -1, &err); 

if (result == FALSE) 
{ 
    /* error saving file, show message to user */ 
    error_message (err->message); 
    g_error_free (err); 
}   

g_free (text); 

체크 아웃 다음 API 문서 : textview1에

  1. http://developer.gnome.org/gtk3/stable/GtkTextBuffer.html
  2. http://developer.gnome.org/glib/stable/glib-File-Utilities.html
+0

그런데'result'는 gboolean이고'buffer'는 GtkTextBuffer이고'err'은 GError이고'start' /'end'는 GtkTextIter입니다. 이 코드에서 가져온 것입니다 : http://www.micahcarrick.com/files/gtk-glade-tutorial/C/main.c –

+0

내 프로그램에서 코드를 구현했지만 오류 코드 11 (세그먼트 오류)으로 인해 충돌합니다. 뭐가 문제 야? 이것은 내 함수입니다 : – user1464420

+0

실제로 사용하는 함수에 붙여 넣을 수 있습니까? –

1
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); 

} 

데이터 포인트 여기에 내 옛날 튜토리얼에서 미리보기입니다.

관련 문제