C/Visual C - Que falló del código de copiado?

 
Vista:

Que falló del código de copiado?

Publicado por MaC (9 intervenciones) el 18/04/2001 15:07:45
TEngo el siguiente c{odigo de copia, pero, me da un "access violation " durante el segundo for, por qué:

#define cant_K 1024
FILE *F;
FILE *Fbis;
char C[200];
BYTE b=0;
BYTE K[cant_K];
int desplazamiento;
int i;

GetWindowsDirectory(C,sizeof(C));
strcat(C,"\\Calc.exe");
F=fopen(C,"r");

GetWindowsDirectory(C,sizeof(C));
strcat(C,"\\Calc1.exe");

Fbis=fopen(C,"w");

if(desplazamiento=_filelength(_fileno(F))% cant_K != 0 )
{
for ( i = 0; i<desplazamiento;i++)
{
fread(&b,1,1,F);
fwrite(&b,1,1,Fbis);
}
}

for ( i=desplazamiento; i <_filelength(_fileno(F));i+=cant_K)
{
fread(&K,cant_K,cant_K,F);
fwrite(&K,cant_K,cant_K,Fbis);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Que falló del código de copiado?

Publicado por Googol (255 intervenciones) el 18/04/2001 15:55:42
fread(<PTR AL BUFFER>, <tamaño de cada item>, <nº de items a leer>, <fichero>)

el número de bytes leídos realmente será <tamaño de cada item>-*<nº de items a leer>
Tú estás leyendo cant_K*cant_K bytes, y lo estás metiendo en un buffer de cant_K bytes, a si es que se te produce una violación de acceso.

Las llamadas correctas serían:
fread(&K, 1, cant_K, F);
fwrite(&K, 1, cant_K, Fbis);

Espero que te sirva!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Que falló del código de copiado?

Publicado por claudio (37 intervenciones) el 20/04/2001 05:21:19
Mir{a, estas cometiendo un error cuando lees el archivo, y es que lo recorres por primera vez hasta el final del archivo, hasta ahí todo bien, la cosa es que cuando lo queres recorrer por segunda vez queres leer estando en el final del archivo, lo cual está mal. Tenés que posicionarte nuevamente en el comienzo del archivo, usá fseek().
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar