Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用gtk3加载和写入二进制文件_C_Gtk3_Glib - Fatal编程技术网

在c中使用gtk3加载和写入二进制文件

在c中使用gtk3加载和写入二进制文件,c,gtk3,glib,C,Gtk3,Glib,我正在开发一个应用程序来分析科学数据。我无法加载二进制文件并使用读取文件的部分内容创建新的二进制文件 我使用了GFileoutputStream和g\u file\u load\u contents,但一旦为零,它就会将其作为我不想要的终止字符。我想读取偶数零,然后按位提取数据。任何帮助都将不胜感激 我的代码: void file_selected(GtkWidget *filechooserbutton, gpointer data, GtkTextBuffer *buffer) {

我正在开发一个应用程序来分析科学数据。我无法加载二进制文件并使用读取文件的部分内容创建新的二进制文件

我使用了
GFileoutputStream
g\u file\u load\u contents
,但一旦为零,它就会将其作为我不想要的终止字符。我想读取偶数零,然后按位提取数据。任何帮助都将不胜感激

我的代码:

 void file_selected(GtkWidget *filechooserbutton, gpointer data, GtkTextBuffer *buffer) {   
    filename=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooserbutton));
    g_file_get_contents(filename, &contents, NULL, NULL);

    text1 = g_substr(contents,0,value);     

    gint DataHeaderNum=96;
    gint value2=value+DataHeaderNum;
    text2 = g_substr(contents,value,value2);        

    gchar *filler;
    filler=g_strnfill (DataHeaderNum,'0');
    //g_print(filler);
    gint DataNum=2048-DataHeaderNum;
    gint value3=value2+DataNum;
    text3 = g_substr(contents,value,value3);
    g_strlcat(filler,text3,2048);
    text3=g_strdup(filler);
    //g_print(text3);


    gchar *full;
    gchar *name="SpaceCraftHeader";
    gchar *name2="DataHeader";
    gchar *name3="Data";

    full=g_strdup(filename);
    g_strlcat(full,name,50);

    GFile *file=g_file_new_for_path(full);
    GFileOutputStream *output=g_file_replace(
                file,NULL,FALSE,
                G_FILE_CREATE_NONE,
                NULL,NULL);

    g_output_stream_write(G_OUTPUT_STREAM(output),
                text1,strlen(text1),NULL,NULL);

    g_output_stream_close(G_OUTPUT_STREAM(output),NULL,NULL);


}

g\u file\u get\u contents
按照您的需要读取整个文件。但是,如果您丢弃了长度,并将其作为C中的字符串处理,那么很明显,您在读取第一个空字节后会遇到问题

你应该做的第一件事是节省长度。将调用
g\u file\u get\u contents
更改为类似以下内容:

gsize length;
g_file_get_contents(filename, &contents, &length, NULL);
在实际代码中,还应该检查返回值和/或GError参数


现在您在
内容中有了一个字节数组
,在
长度中有了字节数
。请注意,
length
是整个文件的大小,而不是第一个空字节之前的字节数。您可以对该数据执行任何操作,但请记住,在C中,字符串以null结尾。这意味着,如果选择将缓冲区视为字符串,则第一个空字节是该字符串的结尾。如果你想继续读,只需在下一个字节重新开始;只要你不超过文件的结尾,你就应该没事。

问题不应该被命名为“…和写作…”