Viernes 8 de Noviembre de 2024, 21:33
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Copiar archivos con C
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Copiar archivos con C (Leído 17666 veces)
spyfly
Miembro activo
Mensajes: 81
Copiar archivos con C
«
en:
Viernes 6 de Mayo de 2011, 16:04 »
0
Hola
Queria copiar el contenido de 3 archivo en otro archivo de salida. Añadiendo un par de nuevas lineas entre esos archivos. Empezamos por copiar el completo del primer archivo, programando en c, lo he intentando con estas lineas:
letra=getc(ficheroL);
while (feof(ficheroL)==0)
{
putc(letra,ficheroE);
printf( "%c",letra );
letra=getc(ficheroL);
}
pero no me reproduce exactamente el mismo contenido ya que el primer archivo tiene un caracter raro como un cuadrado y en la copia lo detecta como un salto de linea, como puedo solucionar esto?
Tweet
La vida es dura
SPYFLY
su -
Moderador
Mensajes: 2349
Re: Copiar archivos con C
«
Respuesta #1 en:
Domingo 8 de Mayo de 2011, 17:54 »
0
Aunque no he probado el codigo, ahi va:
Código: C
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int
fp
=
open
(
"fichero"
,
O_RDONLY
)
;
if
(
fp
<
0
)
{
perror
(
"Error: can't open data filesn"
)
;
exit
(
EXIT_FAILURE
)
;
}
// leemos desde el inicio del fichero
lseek
(
fp
,
0
,
SEEK_SET
)
;
int
err
=
0
;
char
buffer
;
while
(
(
err
=
read
(
fp
,
buffer
,
sizeof
(
char
)
)
)
>
0
)
{
printf
(
"Siguiente caracter: %cn"
,
buffer
)
;
}
close
(
fp
)
;
Con eso lo haces
pero ten en cuenta que muchas de las funciones (como las de unistd.h) se encuentra en otro lado en Windows (como io.h)
*******PELIGRO LEE ESTO!!*******
There is no place like 127.0.0.1
Conecto luego existo, no conecto luego insisto.
spyfly
Miembro activo
Mensajes: 81
Re: Copiar archivos con C
«
Respuesta #2 en:
Lunes 9 de Mayo de 2011, 12:00 »
0
con read y write me ocurre lo mismo, el cuadradito a copiar no se interpreta de esa manera sino como un salto de linea.
Con fread y fwrite me ocurre lo mismo... los cuadrados los interpreta como salto de línea.
Con fscanf y fprintf tampoco me interpreta de manera correcta ese cuadradito.
La vida es dura
SPYFLY
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: Copiar archivos con C
«
Respuesta #3 en:
Lunes 9 de Mayo de 2011, 19:30 »
0
¿Estas abriendo el archivo en modo binario o en modo texto? Sospecho que lo abres en modo texto. Si no especificas el modo, por defecto te abre el archivo en modo texto, como si pusieras "t", para abrirlo en modo binario debes definir explictamente modo binario "b", aunque no pones el codigo para abrir el archivo, pero sospecho que ese es tu problema. En modo texto, te convierte los caracteres de salto de linea (0xA) en 2, salto de linea y retorno de carro (0xA OxD), dependiendo de tu sistema operativo.
Te dejo un codigo de ejemplo, lo probe y me funciona adecuadamente en windows, compilado con Visual Studio 2010. Si eso no resuelve tu problema, publica una porcion mas grande de tu codigo, que incluya como abres y cierras tu archivo.
Código: C++
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
char
letra
;
FILE
*
ficheroL,
*
ficheroE
;
int
main
(
)
{
// modo "rb" binario lectura, si no especificas b lo abre en modo texto
// (modo por defecto) como si escribieras "rt"
ficheroL
=
fopen
(
"archivo1.dat"
,
"rb"
)
;
// modo "wb" binario escritura, igual que antes, si no especificas
// binario, lo abre en modo texto, como si escribieras "wt"
ficheroE
=
fopen
(
"archivo2.dat"
,
"wb"
)
;
letra
=
getc
(
ficheroL
)
;
while
(
feof
(
ficheroL
)
==
0
)
{
putc
(
letra,ficheroE
)
;
printf
(
"%c"
, letra
)
;
letra
=
getc
(
ficheroL
)
;
}
fclose
(
ficheroL
)
;
fclose
(
ficheroE
)
;
system
(
"pause"
)
;
return
0
;
}
Saludos
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
su -
Moderador
Mensajes: 2349
Re: Copiar archivos con C
«
Respuesta #4 en:
Jueves 12 de Mayo de 2011, 06:02 »
0
La función
getc()
no devuelve un entero en vez un
char
?
En sistemas POSIX (Linux, *BSD...) tanto read como write trabajan a nivel binario (al igual que open) y no existe forma de decirle que no lo haga (para el es una secuencia de bytes). Supongo que estas en Windos... asi que le debes agregar el flag O_BINARY para asegurarse de no modificar los datos, o usar la opcion de ProfesorX
.
Código: C
int
fp
=
open
(
"fichero"
,
O_RDONLY
|
O_BINARY
)
;
*******PELIGRO LEE ESTO!!*******
There is no place like 127.0.0.1
Conecto luego existo, no conecto luego insisto.
Leber
Miembro activo
Mensajes: 65
Re: Copiar archivos con C
«
Respuesta #5 en:
Jueves 12 de Mayo de 2011, 09:27 »
0
Cita de: "su -"
La función
getc()
no devuelve un entero en vez un
char
?
Si, devuelve un entero, que es el codigo en ascii que representa dicha letra o numero.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Copiar archivos con C