Invertir el contenido de un archivo utilizando C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos cómo invertir el contenido de un archivo utilizando el lenguaje de programación C.
Leeremos el contenido del archivo de entrada carácter por carácter y lo escribiremos en orden inverso en el archivo de salida.

Nota: Debes crear el archivo ~/project/main.c por ti mismo para practicar la codificación y aprender cómo compilarlo y ejecutarlo utilizando gcc.

cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/FileHandlingGroup(["File Handling"]) c/ControlFlowGroup -.-> c/for_loop("For Loop") c/PointersandMemoryGroup -.-> c/memory_address("Memory Address") c/FileHandlingGroup -.-> c/write_to_files("Write To Files") c/FileHandlingGroup -.-> c/create_files("Create Files") c/FileHandlingGroup -.-> c/read_files("Read Files") subgraph Lab Skills c/for_loop -.-> lab-123317{{"Invertir el contenido de un archivo utilizando C"}} c/memory_address -.-> lab-123317{{"Invertir el contenido de un archivo utilizando C"}} c/write_to_files -.-> lab-123317{{"Invertir el contenido de un archivo utilizando C"}} c/create_files -.-> lab-123317{{"Invertir el contenido de un archivo utilizando C"}} c/read_files -.-> lab-123317{{"Invertir el contenido de un archivo utilizando C"}} end

Abrir archivos de entrada y salida

En el primer paso, abriremos los archivos de entrada y salida utilizando la función fopen(). Crearemos dos punteros de archivo para estos archivos, uno para la entrada y otro para la salida.

FILE *input_file, *output_file;
input_file = fopen("input.txt", "r");
output_file = fopen("output.txt", "w");

Contar el número de caracteres en el archivo de entrada

En este paso, contaremos el número de caracteres en el archivo de entrada utilizando las funciones fseek() y ftell().
Estableceremos la posición del archivo al final del archivo utilizando fseek(input_file, 0, SEEK_END); y obtendremos la posición actual del archivo utilizando ftell(input_file);.
Esto nos dará el número total de caracteres en el archivo de entrada.

fseek(input_file, 0, SEEK_END);
long total_characters = ftell(input_file);

Copiar los caracteres en orden inverso desde el archivo de entrada al archivo de salida

Ahora que tenemos el número total de caracteres en el archivo de entrada, copiaremos los caracteres en orden inverso al archivo de salida.
Recorreremos el archivo de entrada carácter por carácter y escribiremos cada carácter en el archivo de salida utilizando la función fputc().
Comenzaremos desde el último carácter en el archivo de entrada y nos moveremos hacia atrás utilizando fseek(input_file, -1L, SEEK_CUR);.

for (long i = total_characters-1; i >= 0; i--) {
  fseek(input_file, i, SEEK_SET);
  char c = fgetc(input_file);
  fputc(c, output_file);
}

Cerrar los archivos de entrada y salida

En el último paso, cerraremos los archivos de entrada y salida utilizando la función fclose().

fclose(input_file);
fclose(output_file);

Resumen

En este laboratorio, aprendimos cómo invertir el contenido de un archivo utilizando el lenguaje de programación C. Abrimos los archivos de entrada y salida, contamos el número de caracteres en el archivo de entrada, copiamos los caracteres en orden inverso al archivo de salida y cerramos los archivos de entrada y salida.