Diferencia entre r+ y w+ en fopen()

6 minutos de lectura

avatar de usuario
yaylitzis

En fopen("myfile", "r+") cual es la diferencia entre el "r+" y "w+" modo abierto? Leo esto:

"r" Abre un archivo de texto para leer.
"w" Abra un archivo de texto para escribir, truncar un archivo existente a cero o crear el archivo si no existe.

"r+" Abra un archivo de texto para actualizar (es decir, tanto para leer como para escribir).
"w+" Abra un archivo de texto para la actualización (lectura y escritura), primero truncando el archivo a cero si existe o creando el archivo si no existe.

Quiero decir, la diferencia es que si abro el archivo con "w+"el archivo se borrará primero?

  • las 2 diferencias están ahí: truncar y crear.

    usuario2404501

    14/01/2014 a las 12:50

  • … será “borrado” primero, o creado si no existe (mientras que r+ daría error en este caso.

    – ShinTakezou

    14/01/2014 a las 12:50

avatar de usuario
Pedro

Ambas cosas r+ y w+ puede leer y escribir en un archivo. Sin embargo, r+ no elimina el contenido del archivo y no crea un nuevo archivo si dicho archivo no existe, mientras que w+ elimina el contenido del archivo y lo crea si no existe.

  • Estaba buscando una manera de no eliminar el contenido del archivo (como r+) pero también crear un nuevo archivo si no existe (como w+). yo descubrí open(x, 'a').close(); open(x, 'r+')

    – colineador

    23 de mayo de 2018 a las 2:04

avatar de usuario
trucos

La principal diferencia es w+ trunque el archivo a la longitud cero si existe o cree un nuevo archivo si no existe. Tiempo r+ ni elimina el contenido ni crea un nuevo archivo si no existe.

Prueba estos códigos y lo entenderás:

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}  

y luego esto

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w+");
   fclose(fp);
}   

si vas a abrir test.txtverá que todos los datos escritos por el primer programa se han borrado.
Repita esto para r+ y ver el resultado.
Aquí está el resumen de los diferentes modos de archivo (1 => ture0 => false):

ingrese la descripción de la imagen aquí

  • Esto no responde la pregunta.

    –Cengiz Kandemir

    24 de mayo de 2019 a las 9:20

Este diagrama será más rápido de leer la próxima vez. Tal vez alguien más lo encuentre útil también. Esto se explica claramente la diferencia entre. ingrese la descripción de la imagen aquí

  • el diagrama de flujo es lo mejor 😀

    –Srinath Ganesh

    19 de diciembre de 2020 a las 16:19

r = read mode only
r+ = read/write mode
w = write mode only
w+ = read/write mode, if the file already exists override it (empty it)

Entonces sí, si el archivo ya existe, w+ lo borrará y le dará un archivo vacío.

avatar de usuario
sátvico

w+

#include <stdio.h>
int main()
{
   FILE *fp;
   fp = fopen("test.txt", "w+");  //write and read mode
   fprintf(fp, "This is testing for fprintf...\n"); 

   rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
   char ch;
   while((ch=getc(fp))!=EOF)
   putchar(ch);

   fclose(fp);
}  

producción

This is testing for fprintf...

prueba.txt

This is testing for fprintf...

w y r formar w+

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w"); //only write mode
   fprintf(fp, "This is testing for fprintf...\n"); 
   fclose(fp);
   fp = fopen("test.txt", "r");
   char ch;
   while((ch=getc(fp))!=EOF)
   putchar(ch);
   fclose(fp);
}  

producción

This is testing for fprintf...

prueba.txt

This is testing for fprintf...

r+

prueba.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "r+");  //read and write mode
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

producción

This is testing for fprintf...

prueba.txt

This is testing for fprintf again...

r y w formar r+

prueba.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "r"); 
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    fclose(fp);

    fp=fopen("test.txt","w");
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

producción

This is testing for fprintf...

prueba.txt

This is testing for fprintf again...

un+

prueba.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "a+");  //append and read mode
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

producción

This is testing for fprintf...

prueba.txt

This is testing for fprintf...
This is testing for fprintf again...

a y r formar un+

prueba.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "a");  //append and read mode
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    fclose(fp);
    fp=fopen("test.txt","r");
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

producción

This is testing for fprintf...

prueba.txt

This is testing for fprintf...
This is testing for fprintf again...

  • La mejor respuesta en mi humilde opinión. Debe ser el aceptado.

    – Sopalajo de Arriérez

    3 de enero de 2020 a las 22:39

  • ¿Qué sucede con el archivo de texto abierto en modo r+ si la cadena impresa en el ejemplo anterior es más corta que la que está en el test.text inicial? por ejemplo fprintf (fp, “Hola”); ¿Se convierte simplemente en Hola o Hola está probando fprintf nuevamente …

    – Janjan

    28 de abril de 2020 a las 20:03

  • @Janjan Imprime Hola

    – Sátvico

    29 de abril de 2020 a las 5:21

avatar de usuario
perreal

Hay 2 diferencias, a diferencia de r+, w+ voluntad:

  • crear el archivo si aún no existe
  • primero lo truncará, es decir, borrará su contenido

  • La mejor respuesta en mi humilde opinión. Debe ser el aceptado.

    – Sopalajo de Arriérez

    3 de enero de 2020 a las 22:39

  • ¿Qué sucede con el archivo de texto abierto en modo r+ si la cadena impresa en el ejemplo anterior es más corta que la que está en el test.text inicial? por ejemplo fprintf (fp, “Hola”); ¿Se convierte simplemente en Hola o Hola está probando fprintf nuevamente …

    – Janjan

    28 de abril de 2020 a las 20:03

  • @Janjan Imprime Hola

    – Sátvico

    29 de abril de 2020 a las 5:21

avatar de usuario
Bansal Ashwani

r+ El archivo existente se abre desde el principio tanto para lectura como para escritura. w+ Igual que w excepto para lectura y escritura.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad