Foros del Web » Programación para mayores de 30 ;) » C/C++ »

El fichero está vacío

Estas en el tema de El fichero está vacío en el foro de C/C++ en Foros del Web. Estoy intentando comprobar si un fichero q me pasan por parámetro está o no vacío, pero no lo consigo. Puedo obtener el tamaño, y si ...
  #1 (permalink)  
Antiguo 17/03/2008, 06:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 19 años
Puntos: 1
Pregunta El fichero está vacío

Estoy intentando comprobar si un fichero q me pasan por parámetro está o no vacío, pero no lo consigo. Puedo obtener el tamaño, y si es cero... Pero me da un parse_error al llamar al abrirlo y asignarlo a yyin.

¿Se podría comprobar sin abrir el fichero?

Gracias!
  #2 (permalink)  
Antiguo 30/03/2008, 19:55
 
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: El fichero está vacío

/*
No es posible obtener el tama¤o de un archivo sin abrirlo.
Lo que se puede hacer es una funci¢n que lo haga pasando como par*metro el nombre del archivo.
Hide dos versiones, te recomiendo la primera, ya que la sengunda hay que especificar si es binario o no.
Espero que sea esto lo que buscabas.
*/
#include <stdio.h>
#include <conio.h>
#include <io.h>

long getfilesize_1(char *filename)
{
int fh;
long size;

fh = open(filename, 0);
if(fh == -1)
size = -1;
else
{
size = filelength(fh); // Obtener el tama¤o de archivo
close(fh);
}
return size; // Retornar el tama¤o
}
long getfilesize_2(char *filename, int binary)
{
FILE *pf;
long old;
long size;

if(binary)
pf = fopen(filename, "b");
else
pf = fopen(filename, "r");
if(pf == NULL)
size = -1;
else
{
old = ftell(pf); // Obtener el cursor actual
fseek(pf, 0, SEEK_END); // Ir al final del archivo
size = ftell(pf); // Obtener el cursor actual (o sea el final del archivo (tama¤o))
fseek(pf, old, SEEK_SET); // Colocar el cursor el la posici¢n original

fclose(pf);
}
return size; // Retornar el tama¤o
}
int main(void)
{
long size;

clrscr();
printf("---------------------- test getfilesize_1 ----------------------\n");
size = getfilesize_1("C:\\texto.txt");
if(size == -1)
printf("No se pudo abrir el archivo\n");
else
printf("El tamano del archivo es %d\n", size);

printf("---------------------- test getfilesize_2 ----------------------\n");
size = getfilesize_2("C:\\texto.txt", 1);
if(size == -1)
printf("No se pudo abrir el archivo\n");
else
printf("El tamano del archivo es %d\n", size);

getch();
}
  #3 (permalink)  
Antiguo 31/03/2008, 01:14
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años, 1 mes
Puntos: 6
Re: El fichero está vacío

Cita:
Iniciado por Germancho7186 Ver Mensaje
/*
No es posible obtener el tama¤o de un archivo sin abrirlo.
Siento contradecirte, pero si que se puede con la función:
Código:
int stat(const char *path, struct stat *buf);
Tienes que consultar el valor del campo st_size en la estructura stat.

Mas información en: http://linux.die.net/man/2/stat
  #4 (permalink)  
Antiguo 31/03/2008, 01:24
 
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: El fichero está vacío

Respondiendo a 00siete, la verdad que esa función no la conocía, y aún no la conosco. ¿En que librería se encuentra?.

int stat(const char *path, struct stat *buf); = ???
  #5 (permalink)  
Antiguo 31/03/2008, 01:24
 
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: El fichero está vacío

Lo que sucede es que yo no programo en Linux.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:43.