elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda fopen() y modos de apertura
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda fopen() y modos de apertura  (Leído 7,073 veces)
cgvwzq

Desconectado Desconectado

Mensajes: 57


Agente P.


Ver Perfil WWW
Duda fopen() y modos de apertura
« en: 6 Mayo 2010, 21:44 pm »

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.

Código
  1. fd = fopen(nombre,a+b);

El fseek funciona perfectamente, y puedo leer cualquier posición, pero cuando se escribe se va al fin de fichero...

Citar
"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 Desconectado

Mensajes: 109


Tu única Limitación Es tú Imaginación (:


Ver Perfil
Re: Duda fopen() y modos de apertura
« Respuesta #1 en: 6 Mayo 2010, 22:11 pm »

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 Desconectado

Mensajes: 57


Agente P.


Ver Perfil WWW
Re: Duda fopen() y modos de apertura
« Respuesta #2 en: 6 Mayo 2010, 22:19 pm »

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 Desconectado

Mensajes: 109


Tu única Limitación Es tú Imaginación (:


Ver Perfil
Re: Duda fopen() y modos de apertura
« Respuesta #3 en: 6 Mayo 2010, 23:31 pm »

Para poder ver si existe el archivo o no .

Código
  1. int main()
  2. {
  3.  
  4. FILE* archivo;
  5. archivo = fopen("nombredetuarchivo.txt","r+");
  6.  
  7. if (archivo == NULL)
  8. {
  9.  printf("Error al abrir el archivo");
  10.  return -1;
  11. }
  12.  
  13. else
  14. {
  15.  // (condición)
  16. }
  17.  
  18. return 0;
  19. }
  20.  
  21.  


En línea


...DaR LaS GraCiaS No CuestA NadA...
cgvwzq

Desconectado Desconectado

Mensajes: 57


Agente P.


Ver Perfil WWW
Re: Duda fopen() y modos de apertura
« Respuesta #4 en: 6 Mayo 2010, 23:45 pm »

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 Desconectado

Mensajes: 823



Ver Perfil
Re: Duda fopen() y modos de apertura
« Respuesta #5 en: 6 Mayo 2010, 23:53 pm »

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 Desconectado

Mensajes: 109


Tu única Limitación Es tú Imaginación (:


Ver Perfil
Re: Duda fopen() y modos de apertura
« Respuesta #6 en: 6 Mayo 2010, 23:58 pm »

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 Desconectado

Mensajes: 57


Agente P.


Ver Perfil WWW
Re: Duda fopen() y modos de apertura
« Respuesta #7 en: 7 Mayo 2010, 00:17 am »

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í:

Código
  1. fd = fopen(nombre,"rb+");
  2. if (fd == NULL) {
  3.   fd = fopen(nombre,"a");
  4.   fclose(fd);
  5.   fd=fopen(nombre,"rb+");
  6. }
  7.  

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 Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Duda fopen() y modos de apertura
« Respuesta #8 en: 7 Mayo 2010, 00:25 am »

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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
fopen no abre archivos « 1 2 »
Desarrollo Web
Nitch 13 8,212 Último mensaje 2 Julio 2011, 15:05 pm
por #!drvy
Ayuda los modos de apertura de archivos en C.
Programación C/C++
theluigy13etv 6 6,426 Último mensaje 23 Diciembre 2011, 16:28 pm
por Sagrini
Duda fopen() PHP
Desarrollo Web
..:ALT3RD:.. 9 3,498 Último mensaje 26 Agosto 2013, 00:39 am
por GenR_18
fopen() y c++
Programación C/C++
m@o_614 4 2,929 Último mensaje 3 Marzo 2014, 23:58 pm
por rir3760
fstream y fopen y sus modos
Programación C/C++
patilanz 8 3,988 Último mensaje 15 Abril 2014, 13:00 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines