[DUDA] Variable en open() de ofstream;

Iniciado por Ch1n0Cr, 23 Noviembre 2010, 01:47 AM

0 Miembros y 1 Visitante están viendo este tema.

Ch1n0Cr

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 (cpp) [Seleccionar]
ofstream miScript;
miScript.open("archivos/miScript.txt");
miScript<< descripcionScript;
miScript.close();


Y quiero que me quede algo como esto:

Código (cpp) [Seleccionar]
ofstream miScript;
miScript.open("archivos/" + tituloScript + ".txt");
miScript<< descripcionScript;
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 ^^

Beakman

tenes que concatenar la variable
strcat( tituloScript, ".txt" );
y asi hasta tener lo que querés

Ch1n0Cr

Cita de: qily en 23 Noviembre 2010, 02:39 AM
tenes que concatenar la variable
strcat( tituloScript, ".txt" );
y asi hasta tener lo que querés

Sí, pero igual si hago:

Código (cpp) [Seleccionar]
strcat(nombreScript, ".txt");

ofstream miScript;
miScript.open(nombreScript);
miScript<< descripcionScript;
miScript.close();


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

Beakman

ahh..
Que error te devuelve?

..esto tampoco funciona?

ofstream miScript(nombreScript);
miScript<< descripcionScript;
miScript.close();

Ch1n0Cr

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>]


Beakman

La variable "nombreScript" es un string?
No tiene que ser un string.

Ch1n0Cr

Sí lo es, de hecho es xq ahí almaceno el contenido de un cin... ¿qué debo de hacer?

Beakman

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?

Ch1n0Cr

Gracias, no sabía que no admitía string xD... al final me ha quedado así:

Código (cpp) [Seleccionar]
// Crear el archivo
string nombreArchivo = "archivos/" + nombreScript + " - " + categoriaScript + ".txt";
char *rutaArchivo = strdup(nombreArchivo.c_str());

ofstream miScript;
miScript.open(rutaArchivo);
miScript << "Titulo: " << nombreScript << "\nCategoría: " << categoriaScript << "\nCódigo:\n\n" << descripcionScript;
miScript.close();

Beakman

denada.. ya te funciono?.. no admite es una lastima XD jeje