Autor
|
Tema: Duda fopen() y modos de apertura (Leído 7,411 veces)
|
cgvwzq
Desconectado
Mensajes: 57
Agente P.
|
Pues estoy haciendo algo con ficheros y tengo un pequeño problema. Necesito abrir un fichero secuencial para escritura/lectura y poder escribir, leer o modificar un registro en una posición X. Para ello uso fseek() y situo el cursor en la posición que me interesa.
El fseek funciona perfectamente, y puedo leer cualquier posición, pero cuando se escribe se va al fin de fichero... "a+" | Open a file for reading and appending. All writing operations are performed at the end of the file, protecting the previous content to be overwritten. You can reposition (fseek, rewind) the internal pointer to anywhere in the file for reading, but writing operations will move it back to the end of file. The file is created if it does not exist. ¿Hay alguna forma de evitar eso, o debo estar cambiando de modo manualmente cada vez que quiera hacer una operación? Saludos!
|
|
|
En línea
|
Some stuff:- www.a] parsed as ]www.a]
- Bypass elhacker's img filter with ALT attribute!
- ¿Para cuándo SQLi I y II? WZ
|
|
|
AckeR
Desconectado
Mensajes: 109
Tu única Limitación Es tú Imaginación (:
|
Hola
Hay varios Modos apertura que te pueden servir.
Los modos de apertura válidos son:
* Modo "r": Abre el archivo existente para lectura en modo secuencial. El archivo debe existir previamente. * Modo "w": Crea un archivo nuevo para escritura en modo secuencial,pero cuidado si el archivo ya existe, se borrará y se creará uno nuevo. * Modo "a": Abre un archivo existente para escritura en modo secuencial, añadiendo los datos al final de los que haya. Si el archivo no existe, se crea. * Modo "r+": Abre el archivo para lectura/escritura en modo directo. El archivo debe existir previamente. Se puede leer y escribir en cualquier posición del archivo. * Modo "w+": Crea un archivo para lectura/escritura en modo directo. Si el archivo ya existe, se elimina y se crea de nuevo. Se puede leer y escribir en cualquier posición del archivo. * Modo "a+": Abre un archivo existente para lectura/escritura en modo directo. Si el archivo no existe, lo crea. La escritura sólo se podrá realizar al final del archivo (modo "añadir"), aunque se puede leer en cualquier posición.
|
|
|
En línea
|
...DaR LaS GraCiaS No CuestA NadA...
|
|
|
cgvwzq
Desconectado
Mensajes: 57
Agente P.
|
Sí, eso lo conozco... Y lo que me hace falta en verdad es "rb+", pero necesito comprobar si el archivo existe por adelantado... ¿Hay alguna función estándard para ello? Sino en caso de error le doy "wb+", aunque si falla por alguna otra cosa lo trunco y se lia... :S
|
|
|
En línea
|
Some stuff:- www.a] parsed as ]www.a]
- Bypass elhacker's img filter with ALT attribute!
- ¿Para cuándo SQLi I y II? WZ
|
|
|
AckeR
Desconectado
Mensajes: 109
Tu única Limitación Es tú Imaginación (:
|
Para poder ver si existe el archivo o no . int main() { FILE* archivo; archivo = fopen("nombredetuarchivo.txt","r+"); if (archivo == NULL) { printf("Error al abrir el archivo"); return -1; } else { // (condición) } return 0; }
|
|
|
En línea
|
...DaR LaS GraCiaS No CuestA NadA...
|
|
|
cgvwzq
Desconectado
Mensajes: 57
Agente P.
|
Gracias AckeR, a eso me referia... Pero puede dar error por otras razones, a parte de porque no exista el archivo, y si lo trunco estando lleno liada parda.
|
|
|
En línea
|
Some stuff:- www.a] parsed as ]www.a]
- Bypass elhacker's img filter with ALT attribute!
- ¿Para cuándo SQLi I y II? WZ
|
|
|
Akai
Desconectado
Mensajes: 823
|
Sugerencia: y si pruebas primero a abrirlo con r unicamente para comprobar que existe y en caso de existir lo cierras y abres ya con el modo que te interesa?
|
|
|
En línea
|
|
|
|
AckeR
Desconectado
Mensajes: 109
Tu única Limitación Es tú Imaginación (:
|
umh mira:
Si fopen(), por la razón que sea, no puede abrir el archivo, devolverá un puntero a NULL.
entonces esto te asegura si el archivo existe o no , otra cosa el archivo tiene que estar ubicada donde tengas tu programa, o bien tu al momento de abrir el archivo , darle la ubicacion de este mismo.
Suerte!
|
|
|
En línea
|
...DaR LaS GraCiaS No CuestA NadA...
|
|
|
cgvwzq
Desconectado
Mensajes: 57
Agente P.
|
No me he explicado bien: que fopen() devuelva NULL no implica que el fichero no exista... Puede ser que no tengamos permisos, que la tabla de fds este llena, o a saber... Y sí, podría hacer algo así: fd = fopen(nombre ,"rb+");if (fd == NULL) { }
Pero me parece una chapuza... : /
|
|
|
En línea
|
Some stuff:- www.a] parsed as ]www.a]
- Bypass elhacker's img filter with ALT attribute!
- ¿Para cuándo SQLi I y II? WZ
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
Es imposible comprobar unicamente la existencia de un archivo en forma estándar. O bien usas métodos específicos del sistema o utilizas alguna librería multiplataforma.
Ademas, que el archivo no exista tampoco implica que tengas permisos para crearlo o que otro proceso no este a punto de crearlo también.
Saludos
|
|
« Última modificación: 7 Mayo 2010, 00:27 am por Littlehorse »
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
fopen no abre archivos
« 1 2 »
Desarrollo Web
|
Nitch
|
13
|
8,684
|
2 Julio 2011, 15:05 pm
por #!drvy
|
|
|
Ayuda los modos de apertura de archivos en C.
Programación C/C++
|
theluigy13etv
|
6
|
6,707
|
23 Diciembre 2011, 16:28 pm
por Sagrini
|
|
|
Duda fopen() PHP
Desarrollo Web
|
..:ALT3RD:..
|
9
|
3,851
|
26 Agosto 2013, 00:39 am
por GenR_18
|
|
|
fopen() y c++
Programación C/C++
|
m@o_614
|
4
|
3,174
|
3 Marzo 2014, 23:58 pm
por rir3760
|
|
|
fstream y fopen y sus modos
Programación C/C++
|
patilanz
|
8
|
4,354
|
15 Abril 2014, 13:00 pm
por ivancea96
|
|