gpt4 book ai didi

C、GLib : Is there a method to get the size - can be applied to text file, 二进制文件、文件夹和符号链接(symbolic link)的共同点?

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:33 25 4
gpt4 key购买 nike

// gcc z.c -o z $(pkg-config --cflags --libs gtk+-2.0)
#include <string.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
struct tst
{
GtkWidget *win, *vb, *ent, *btn, *lbl;
GtkAccelGroup *acc;
GClosure *cls;
};
static void print_val(struct tst *prg)
{
const char *nam = gtk_entry_get_text(GTK_ENTRY(prg->ent));
char *cont;
g_file_get_contents(nam, &cont, NULL, NULL);
int siz = strlen(cont);
g_printf("%d\n", siz);
}
static void window_new()
{
struct tst *prg = g_new0(struct tst, 1);
prg->win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
prg->vb = gtk_vbox_new(TRUE, 0);
prg->ent = gtk_entry_new();
prg->btn = gtk_button_new_with_label("Print!");
prg->lbl = gtk_label_new("Enter the string.");
gtk_container_add(GTK_CONTAINER(prg->win), GTK_WIDGET(prg->vb));
gtk_box_pack_start(GTK_BOX(prg->vb), GTK_WIDGET(prg->ent), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(prg->vb), GTK_WIDGET(prg->btn), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(prg->vb), GTK_WIDGET(prg->lbl), FALSE, FALSE, 0);
g_signal_connect_swapped(prg->win, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect_swapped(prg->btn, "clicked", G_CALLBACK(print_val), prg);
gtk_window_set_title(GTK_WINDOW(prg->win), "Enter the string");
gtk_widget_show_all(GTK_WIDGET(prg->win));
}
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
window_new();
gtk_main();
return 0;
}

使用g_file_get_contents(),至少在这个示例程序中,我可以获得文本文件的大小,但我无法获得二进制文件、文件夹和符号链接(symbolic link)的大小。

当我尝试用它获取二进制文件的大小时,它给出了奇怪的值,而不是二进制文件的大小。

当我尝试用它获取文件夹的大小时,它因段错误而崩溃。

当我尝试用它获取符号链接(symbolic link)的大小时,它给出了链接引用的常规文件的大小,而不是链接本身。

是否有获取大小的方法 - 可以应用于文本文件、二进制文件、文件夹和符号链接(symbolic link)?

最佳答案

通常的做法是

#include <sys/stat.h>

struct stat st;
if (lstat(filepath, &st) == -1) {
perror(filepath);
exit(1);
}
filesize = st.st_size;

请注意,对于 lstat(),报告的大小将是符号链接(symbolic link)本身的大小,而不是它引用的对象;如果您实际上不需要符号链接(symbolic link)自己的大小,请改用 stat()

关于C、GLib : Is there a method to get the size - can be applied to text file, 二进制文件、文件夹和符号链接(symbolic link)的共同点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5359862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com