Tôi nên tìm nạp một tệp nào từ một trang web bằng cách sử dụng gtk libs?Tìm nạp một tệp từ web: trong GTK bằng C
Nếu tập tin của tôi là từ:
gchar * path = "http: //xxx.yyyServer/sharing/temp.txt"
Tôi nên làm gì để tải về nó?
Đối với các tệp cục bộ, tôi chỉ sử dụng các thư viện C như fopen và fread.
Tôi nên làm như thế nào?
Rất tiếc, không có ví dụ về xử lý tệp trong Hướng dẫn. Tôi chỉ có thể thấy Trình chọn tệp từ hộp thoại Tệp.
Vui lòng trợ giúp noob này.
Cảm ơn
CẬP NHẬT VỚI CÔNG TÁC MÃ TỪ NHẬN XÉT: Đoạn code dưới đây làm việc cho các tập tin nhị phân có kích thước chưa biết.
char *name= http://127.0.0.1:8000/mybinfile
int getFile(char *name)
{
GFile *f = g_file_new_for_uri(name);
GFileInputStream *fis = NULL;
GDataInputStream* dis = NULL;
GError *err = NULL;
//char buffer[2048];
char *buffer;
size_t length;
int ret = -1;
GFileInfo *info;
int total_size = -1;
/* get input stream */
fis = g_file_read(f, NULL, &err);
if (err != NULL) {
fprintf(stderr, "ERROR: opening %s\n", name);
g_object_unref(f);
return -1;
}
info = g_file_input_stream_query_info (G_FILE_INPUT_STREAM (fis),G_FILE_ATTRIBUTE_STANDARD_SIZE,NULL, &err);
if (info)
{
if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
total_size = g_file_info_get_size (info);
printf("total_size = %d\n", total_size);
g_object_unref (info);
}
// fill buffer
if(total_size > 0){
buffer = (char *) malloc(sizeof(char) * total_size);
memset(buffer, 0, total_size);
if ((length = g_input_stream_read (G_INPUT_STREAM(fis),
buffer, total_size, NULL, &err)) != -1) {
printf("reading file\n");
}
printf("File length = %d\n", length);
ret = 0;
}
// close streams
g_object_unref(fis);
g_object_unref(f);
return ret;
}
CURL có thể thực hiện công việc. – nullpotent
Làm thế nào về một hack bẩn? int meh = system ("wget" + name); – Mikhail