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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema abrir archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema abrir archivo  (Leído 3,114 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Problema abrir archivo
« en: 15 Agosto 2015, 19:16 pm »

Hola, no entiendo porque si abro el archivo en modo escritura y lectura a la vez, no puedo hacer ambas cosas a la vez, sino que tengo que cerrarlo y volverlo a abrir.

Código
  1. fstream archivo;
  2. archivo.open(directorio, fstream::in | fstream::out);
  3. if (!archivo)
  4. return false;
  5. else{
  6. string contenido;
  7. while (archivo.good()){
  8. contenido += archivo.get();
  9. }
  10.  
  11. //archivo.close();
  12. //archivo.open(directorio, fstream::out || fstream::ate);
  13. //contenido = contenido.insert(inicio, datos);
  14. //archivo.write(contenido.c_str(), contenido.length());
  15. archivo.seekp(inicio);
  16. archivo.write(datos.c_str(), datos.length());
  17. archivo.close();

Este code no funciona, lo que quiero hacer es leer todo el archivo e insertar datos en el archivo, pero no hay manera, parece que despues de leerlo tengo que cerrarlo y abrirlo en escritura para escribir en el, ¿esto es siempre asi? ¿o hago algo mal?

Saludos.


En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema abrir archivo
« Respuesta #1 en: 15 Agosto 2015, 19:44 pm »

Al acabar el while, las flags del objeto serán de error. Lo que has de hacer, es llamar a archivo.clear() al final de la lectura.


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Problema abrir archivo
« Respuesta #2 en: 15 Agosto 2015, 20:11 pm »

Así es, ya lo solucioné gracias por la respuesta, de todas formas al leer el contenido del archivo, aqui:

Código
  1. string contenido;
  2. while (archivo.good()){
  3. contenido += archivo.get();
  4. }

Me preguntaba si se puede hacer de forma más rápida usando archivo.read(contenido, HASTA EL FINAL);

Simplemente por si es más rápido, en vez de caracter a caracter.

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema abrir archivo
« Respuesta #3 en: 15 Agosto 2015, 21:25 pm »

Lo mejor sería que usaras istream::read(). Luego, con istream::gcount() sacas el número caracteres copiados al array Y ya luego, lo puedes convertir a string, tú verás.
Tal vez te interese primero saber el tamaño del fichero con ios::ate y tellg().
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Problema abrir archivo
« Respuesta #4 en: 17 Agosto 2015, 16:43 pm »

Hola, tenía otro problema, y es que quería insertar en el archivo una cadena en mitad de su contenido, para ello probé a usar esto:

Código
  1.                fstream archivo;
  2.        archivo.open(directorio, fstream::in |  fstream::app);//fstream::out |
  3.                archivo.clear();
  4. archivo.seekp(inicio);
  5. archivo.write(datos.c_str(), datos.length());//sobreescribe.
  6. archivo.close();

Muevo el puntero, a "inicio" donde quiero insertar una cadena de carácteres, para ello uso write, pero el problema es que el write me sobreescribe lo que tengo, y corrompe el archivo, lo que quiero es poderlo añadir, sin que haya sobreescritura, he probado a abrirlo solo en modo app (con el puntero atrás), pero luego al usar el seekp() no debe de funcionar ya que me escribe la cadena al final del archivo aunque haya movido el puntero supuestamente, si no hay manera de corregirlo, apuesto apostaré por leer todo el contenido en una string insertar en la string y copiarlo todo al archivo sorbrescribiendolo, pero sería la peor solución.

Saludos y gracias.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema abrir archivo
« Respuesta #5 en: 17 Agosto 2015, 17:47 pm »

ios::app = append. Lo pone al final.

Lo que tienes que hacer es dividir el archivo en 2 por el punto donde queires insertar. Lees y guardas la segunda parte en la memoria del programa. Insertas lo que quieras. Reescribes la segunda parte al final de la inserción.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Problema abrir archivo
« Respuesta #6 en: 18 Agosto 2015, 17:21 pm »

Hola socio, gracias por la respuesta. Eso pensé también, pero de todas formas lo que haces es sobreescribir pero desde el punto que quieras hacia atrás, pensaba que habría alguna opción para insertar y que automaticamente te lo desplace todo, en vez de sobreescritura.

Porque si quiero escribir en la posicion 10 "holaquetal" y el archivo tiene 1500 caracteres, voy a tener que reescribir 1500 + strlen("holaquetal") en vez de insertar. Debería de haber algo para C++, de todas formas tampoco sería difícil implementar una función que lo haga.

Pero para eso, casi que lo leo todo en una cadena, la modifico y lo escribo todo, o como dices tu que sería un poco mas de código.

Saludos y gracias.

Edito: E aquí la implementación:

Código
  1. datos = datos + contenido.substr(inicio);
  2. archivo.clear();
  3. archivo.seekp(inicio);
  4. archivo.write(datos.c_str(), datos.length());
  5. archivo.close();

« Última modificación: 18 Agosto 2015, 18:00 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al abrir alguan archivo AVI
Multimedia
KmU_HmO 6 2,854 Último mensaje 4 Agosto 2005, 20:33 pm
por Songoku
problema al abrir archivo
Programación C/C++
m@o_614 1 2,077 Último mensaje 5 Diciembre 2013, 04:22 am
por vangodp
Problema al abrir un archivo .log
Software
juanmarojinegro 0 1,313 Último mensaje 18 Febrero 2014, 21:23 pm
por juanmarojinegro
Problema al abrir archivo en GEDIT <<<<<<<<<<<<<<<<<!
Programación C/C++
ProgramadorAlvaro 0 1,741 Último mensaje 10 Diciembre 2015, 22:14 pm
por ProgramadorAlvaro
Problema abrir archivo solicitando el nombre
Scripting
yukardo 2 1,934 Último mensaje 22 Septiembre 2016, 20:42 pm
por tincopasan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines