Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Ch1n0Cr en 23 Noviembre 2010, 01:47 am



Título: [DUDA] Variable en open() de ofstream;
Publicado por: Ch1n0Cr en 23 Noviembre 2010, 01:47 am
Hola, yo de nuevo con otra duda. Verán; hice un código el cual me guarda en un archivo el contenido de un String, hasta ahí todo bien. Lo que me gustaría hacer, es que yo pueda introducir una variable en el nombre del archivo a guardar, a ver si me entendieron.

El código que tengo es este:

Código
  1. ofstream miScript;
  2. miScript.open("archivos/miScript.txt");
  3. miScript<< descripcionScript;
  4. miScript.close();

Y quiero que me quede algo como esto:

Código
  1. ofstream miScript;
  2. miScript.open("archivos/" + tituloScript + ".txt");
  3. miScript<< descripcionScript;
  4. miScript.close();

Sólo que no sé como se haría, ya que eso me da error de compilación.
Espero me puedan ayudar.

Saludos ^^


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Beakman en 23 Noviembre 2010, 02:39 am
tenes que concatenar la variable
Código:
strcat( tituloScript, ".txt" );
y asi hasta tener lo que querés


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Ch1n0Cr en 23 Noviembre 2010, 02:51 am
tenes que concatenar la variable
Código:
strcat( tituloScript, ".txt" );
y asi hasta tener lo que querés

Sí, pero igual si hago:

Código
  1. strcat(nombreScript, ".txt");
  2.  
  3. ofstream miScript;
  4. miScript.open(nombreScript);
  5. miScript<< descripcionScript;
  6. miScript.close();

Me da error. Osea, lo que no me permite es poner una variable en los parámetros del open :-S


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Beakman en 23 Noviembre 2010, 03:09 am
ahh..
Que error te devuelve?

..esto tampoco funciona?
Código:
ofstream miScript(nombreScript);
miScript<< descripcionScript;
miScript.close();


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Ch1n0Cr en 23 Noviembre 2010, 03:15 am
Código:
Compilador: Default compiler
Ejecutando  g++.exe...
g++.exe "C:\Users\Kevin\Desktop\ScriptManager\manager.cpp" -o "C:\Users\Kevin\Desktop\ScriptManager\manager.exe"    -I"C:\Dev-Cpp\include\c++\3.3.1"  -I"C:\Dev-Cpp\include\c++\3.3.1\mingw32"  -I"C:\Dev-Cpp\include\c++\3.3.1\backward"  -I"C:\Dev-Cpp\lib\gcc-lib\mingw32\3.3.1\include"  -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib" -lconio
C:/Users/Kevin/Desktop/ScriptManager/manager.cpp: In function `void
   agregarScript()':
C:/Users/Kevin/Desktop/ScriptManager/manager.cpp:122: error: no matching
   function for call to `std::basic_ofstream<char, std::char_traits<char> >::
   open(std::string&)'
C:/Dev-Cpp/include/c++/3.3.1/fstream:691: error: candidates are: void
   std::basic_ofstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode)
   [with _CharT = char, _Traits = std::char_traits<char>]


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Beakman en 23 Noviembre 2010, 03:28 am
La variable "nombreScript" es un string?
No tiene que ser un string.


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Ch1n0Cr en 23 Noviembre 2010, 03:31 am
Sí lo es, de hecho es xq ahí almaceno el contenido de un cin... ¿qué debo de hacer?


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Beakman en 23 Noviembre 2010, 03:36 am
El método open no acepta string.
Tendrías que tener una cadena de caracteres ( char auxiliar[100] ). Y ahi pasas lo que tenes en el string y después si lo pasas al open.
Si lo que te interesa del string es poder ingresar una cadena "infinita" y no querés hacer char auxiliar[100] porque tal vez se necesite mas, entonces hace una cadena con memoria dinamica y le pones el tamaño de acuerdo al tamaño del string.
se entiende?


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Ch1n0Cr en 23 Noviembre 2010, 03:54 am
Gracias, no sabía que no admitía string xD... al final me ha quedado así:

Código
  1. // Crear el archivo
  2. string nombreArchivo = "archivos/" + nombreScript + " - " + categoriaScript + ".txt";
  3. char *rutaArchivo = strdup(nombreArchivo.c_str());
  4.  
  5. ofstream miScript;
  6. miScript.open(rutaArchivo);
  7. miScript << "Titulo: " << nombreScript << "\nCategoría: " << categoriaScript << "\nCódigo:\n\n" << descripcionScript;
  8. miScript.close();


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Beakman en 23 Noviembre 2010, 04:00 am
denada.. ya te funciono?.. no admite es una lastima XD jeje


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Ch1n0Cr en 23 Noviembre 2010, 04:20 am
Si, en realidad una lástima xD... y sí, me funcionó.

Ahora, tengo otra duda (soy novato en el C++, pero tengo bastante experiencia en otros lenguajes web); ¿cómo puedo crear archivos de datos con c++?

Nota: uso la última versión de C++


Título: Re: [DUDA] Variable en open() de ofstream;
Publicado por: Beakman en 23 Noviembre 2010, 04:57 am
es lo que venias haciendo con ofstream.

Si no podes usar las funciones:
fopen ( abrir un archivo )
fwrite ( escribir en archivo )
fread ( leer de archivo )

Si queres saber algo mas complejo tendrías que abrir otro hilo. =)