Autor
|
Tema: Archivos en C (Leído 3,170 veces)
|
NoBass
Desconectado
Mensajes: 2
|
Hola, hace unos pocos meses que he empezado a curiosear por el bonito mundo de la programación. Soy nuevo en el foro y por ahora no puedo aportar mas que dudas, espero que en un futuro no muy lejano pueda ser de ayuda a los que se encuentren en mi actual situación. Dicho ésto, al lío: Llevo días buscando y recopilando información acerca de cómo trabajar con archivos en lenguaje C. He encontrado bastante información a nivel básico acerca de: -Lectura i escritura -El variado elenco de funciones dedicadas a tales fines Por ejemplo aquí: https://kesquivel.files.wordpress.com/2013/08/ficheros2013.pdfhttp://www.cs.buap.mx/~mrodriguez/MIS%20FRAMES/Files2.pdfhttp://www.c.conclase.net/ficheros/?cap=002He leído todo ésto con cariño y paciencia, pero muy a mi pesar, no he encontrado toda la información que deseo. Entiendo que mis dudas, que ahora expongo, son de collejón, así que gracias por la paciencia de antemano. 1.-Si leo un archivo en binario (por ejemplo un pdf) y lo copio a otro archivo, que guardo como pdf, el documento resulta ilegible. Entiendo que ésto es porque el archivo original tiene un formato determinado, que al copiar bit a bit no se mantiene o que hay que interpretar de algún modo. Imagino la copia (bueno de hecho así la veo cuando la abro con el editor de texto) como una montaña absurda de caracteres descabellados que hay que organizar de algún modo, pero intuyo que es algo bastante complejo. 2.-Entonces ¿cómo se copia en C un archivo, manteniendo las características del mismo? Es decir: ¿Cómo se reproduce el clásico ctrl+c desde un programa escrito en C? Lo que me gustaría es encontrar información acerca de éste y procesos similares, es decir, algo mas general acerca de cómo se construyen, organizan, leen e interpretan archivos de todo tipo. Muchísimas gracias y saludos para todos. NoBass No groove
|
|
|
En línea
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
1.-Si leo un archivo en binario (por ejemplo un pdf) y lo copio a otro archivo, que guardo como pdf, el documento resulta ilegible. Entiendo que ésto es porque el archivo original tiene un formato determinado, que al copiar bit a bit no se mantiene o que hay que interpretar de algún modo. Imagino la copia (bueno de hecho así la veo cuando la abro con el editor de texto) como una montaña absurda de caracteres descabellados que hay que organizar de algún modo, pero intuyo que es algo bastante complejo. Eso es rotundamente falso. Si abres un archivo en binario, copias byte a byte y lo guardas en otro archivo con la misma extensión, debería ser una copia exacta, y como tal, no debería haber problemas con la copia. Te dejo un código que copia exactamente un archivo a otro: #include <string.h> #include <stdio.h> #define MAX_PATH 4096 int main() { // Puedes poner MAX_PATH como quieras, o saber este valor a través de librerías // no estándares char ruta_entrada[MAX_PATH]; char ruta_salida[MAX_PATH]; FILE *entrada; FILE *salida; char byte; int salir = 0; // Obtenemos rutas fprintf(stdout , "Introduzca la ruta del archivo a copiar: "); fgets(ruta_entrada , MAX_PATH , stdin ); ruta_entrada [strlen(ruta_entrada ) - 1] = '\0'; fprintf(stdout , "Introduzca la ruta del archivo de destino: "); fgets(ruta_salida , MAX_PATH , stdin ); ruta_salida [strlen(ruta_salida ) - 1] = '\0'; // Abrimos archivos entrada = fopen(ruta_entrada , "rb"); if(NULL == entrada) { fprintf(stderr , "Error abriendo archivo de entrada en '%s'\n", ruta_entrada ); return -1; } salida = fopen(ruta_salida , "wb"); if(NULL == salida) { fprintf(stderr , "Error abriendo archivo de salida en '%s'\n", ruta_salida ); return -1; } // Copiando datos while(0 == salir) { fprintf(stderr , "Error leyendo|escribiendo byte\n"); return -1; } } else { salir = 1; } } // Terminando... fprintf(stdout , "La copia de archivos ha finalizado\n"); return 0; }
Evidentemente, esto no es lo más básico, sino que es una forma "muy segura" de copiar archivos (se podrían haber omitido la comprobación de que los archivos existen, los mensajes de error...) Espero que te sea de ayuda. PD.: Probé el código con un PDF, y funcionó perfectamente
|
|
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas!
No se si lo estarás haciendo así o no, sin ver tu código es imposible saberlo, pero si utilizas feof para saber si has llegado al final del archivo tienes que tener en cuenta dos cosas.
- El indicador de final de archivo se activa después de realizar una lectura cuando ya no quedan más datos por leer: lees el último dato-> haces la siguiente lectura -> se activa el indicador de fin de archivo (y por lo tanto en la última lectura no has obtenido ningún dato útil y si escribes éste último dato estarás escribiendo información que no debería de estar ahí)
- Los archivos que no contienen solo texto (caracteres alfanuméricos, espacios, signos de puntuación y poco más), pueden dar lecturas falsas de final de archivo antes de haber llegado a éste. Así que lo mejor es utilizar las funciones fseek y ftell para para posicionarte al final del archivo, leer la cantidad de bytes que contiene y volver a la posición en la que estaba. Sabiendo la cantidad exacta de bytes que tienes que leer no te hace falta depender del indicador de final de archivo.
¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
|
NoBass
Desconectado
Mensajes: 2
|
Eso es rotundamente falso. Si abres un archivo en binario, copias byte a byte y lo guardas en otro archivo con la misma extensión, debería ser una copia exacta, y como tal, no debería haber problemas con la copia. Pues me alegro muchísimo, porque había llegado a una conclusión aterradora. Gracias por escribir el código, se entiende muy bien. No se si lo estarás haciendo así o no, sin ver tu código es imposible saberlo, pero si utilizas feof para saber si has llegado al final del archivo tienes que tener en cuenta dos cosas. Soy tan listo que después de unas pruebas borré por error el código -lamentable- que había escrito, pero intuyo que el error tendría que ver con lo que sugieres o quizás con el uso de funciones dispares para leer y escribir, puesto que por lo demás se parecía (bueno, de lejos y sin gafas) al que había escrito class_OpenGL. Gracias por vuestra ayuda.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
como puedo convertir archivos flash ha archivos de videos
Diseño Gráfico
|
asitaka_kintaro
|
3
|
6,402
|
22 Enero 2006, 23:53 pm
por Morris
|
|
|
Análisis archivos Extensiones cambiadas - Archivos camuflados - Contenido real
« 1 2 »
Software
|
Esgrimidor
|
11
|
9,738
|
24 Septiembre 2011, 01:53 am
por Esgrimidor
|
|
|
Cómo? Modificar archivos de la carpeta archivos de programas en windows 7
« 1 2 »
Windows
|
anonimo12121
|
10
|
23,364
|
10 Abril 2011, 01:02 am
por Songoku
|
|
|
Archivos dañados tras recuperación de archivos cifrados (virus policia)
Seguridad
|
marianchaparro
|
2
|
10,564
|
17 Mayo 2012, 20:06 pm
por r32
|
|
|
Unir archivos y agregar el nombre de archivos a cada linea por MS-DOS
Scripting
|
cialem
|
4
|
6,193
|
18 Julio 2012, 16:13 pm
por cialem
|
|