How to elegantly open or create new file for reading and writing but not discard existing contents?

5 visualizaciones (últimos 30 días)
If the file exists, open it for reading and writing, but don't discard existing content; else, create it.
Isn't it a very common use case? Why does fopen not seemingly support this?
Note that I don't want to append. I want to read and overwrite some part of the existing content while keep other parts.

Respuesta aceptada

Walter Roberson
Walter Roberson el 4 de Ag. de 2021
fopen with 'a' and close immediately. Then fopen 'r+'
This does rely on no process deleting the file between the time it is fopen 'a' and it is fopen again.
  4 comentarios
Walter Roberson
Walter Roberson el 6 de Ag. de 2021

The underlying languages of implementation, C and C++, do not support the mode you are requesting.

The calls that do support that mode, open(), is not part of C, and is instead a POSIX call https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html . That is a problem on Windows systems as Windows no longer supports POSIX.

I have not examined to find out if Windows supports the mode. MacOS and Linux potentially could, but Mathworks would have to specifically rewrite the code to use non-portable functions because it is not an available mode using portable functions.

Iniciar sesión para comentar.

Más respuestas (1)

KSSV
KSSV el 4 de Ag. de 2021
Read the documentation of fopen, there are multiple options present.
look for fopen with 'a+'. Also have a look on the function exist.
  4 comentarios
埃博拉酱
埃博拉酱 el 4 de Ag. de 2021
I have read the documentation and found no options that exactly match. That's why I ask here. What I'm expecting is clearly written in the question: If the file exists, open it for reading and writing, but don't discard existing content or append; else, create it.
Walter Roberson
Walter Roberson el 4 de Ag. de 2021
Editada: Walter Roberson el 6 de Ag. de 2021

MATLAB does not provide that combination of open permissions.

C's fopen() does not support that combination https://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html and it has to instead be done through a C open() call followed by a call to upgrade the resulting file descriptor into a file*

Iniciar sesión para comentar.

Categorías

Más información sobre Calendar en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by