¿Con qué función debo buscar un archivo de la web usando gtk libs?Obtener un archivo de la web: en GTK usando C
Si mi archivo es de:
gchar * path = "http: //xxx.yyyServer/sharing/temp.txt"
¿Qué debo hacer para descargarlo?
Para los archivos locales, simplemente uso las bibliotecas C como fopen y fread.
¿Cómo debo hacer lo anterior?
Desafortunadamente no hay ejemplos de manejo de archivos en los Tutoriales. Solo puedo ver un selector de Archivo desde los cuadros de diálogo Archivo.
Por favor, ayuda este novato.
Gracias
ACTUALIZADO CON CODIGO DE TRABAJO DE COMENTARIOS: El código siguiente funciona para archivos binarios de tamaños desconocidos.
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 podría hacer el trabajo. – nullpotent
¿Qué tal un truco sucio? int meh = system ("wget" + nombre); – Mikhail