Razón Artificial

La ciencia y el arte de crear videojuegos

Crear archivos .ini en C++

Escrito por adrigm el 22 de enero de 2013 en Programación | 0 Comentarios.

ini_file

Una de las cosas necesarios para RAGE es el leer y escribir archivos ini. Parseadores de este tipo de archivos existen muchos como por ejemplo inih. Aunque en Razón Artificial usaremos uno derivado del proyecto GQE que se adapta muy bien a SFML.

Generar ficheros ini

La cuestión es a la hora de crear estos archivos, generar un ini no he encontrado nada, supongo que por lo trivial y la simpleza que supone ya que no es más que generar un fichero de texto. Por tanto he implementado una clase que se encarga de generar ficheros .ini

Definición

class ConfigCreate
{
public:
	ConfigCreate();

	~ConfigCreate();

	void Open(const std::string& filename);

	void Close();

	void PutSection(const std::string& section);

	void PutValue(const std::string& key, const std::string& value);

	void PutComment(const std::string& comment);

	void PutBlankLine();

private:
	std::ofstream file;

}; // class ConfigCreate

Implementación

ConfigCreate::ConfigCreate()
{
}

ConfigCreate::~ConfigCreate()
{
}

void ConfigCreate::Open(const std::string& filename)
{
	file.open(filename);
	file.clear();
}

void ConfigCreate::Close()
{
	file.close();
}

void ConfigCreate::PutSection(const std::string& section)
{
	file << "[" << section << "]" << std::endl;
}

void ConfigCreate::PutValue(const std::string& key, const std::string& value)
{
	file << key << "=" << value << std::endl;
}

void ConfigCreate::PutComment(const std::string& comment)
{
	file << "# " << comment << std::endl;
}

void ConfigCreate::PutBlankLine()
{
	file << std::endl;
}

Cuidado al crear un fichero sobreescribe otro preexistente, si lo que se quiere es modificar un archivo ini, primero usa un parser para obtener le contenido del fichero y luego generalo de nuevo a partir de los valores obtenidos y los nuevos y/o modificados.

por último su tilización no puede se más sencilla.

ConfigCreate c;
c.Open("prueba.cfg");
c.PutSection("window");
c.PutValue("width", "640");
c.PutValue("height", "480");
c.PutComment("Activa la pantalla completa");
c.PutValue("fullscreen", "0");
c.PutBlankLine();
c.PutSection("Otra");
c.PutComment("lalalalala");
c.PutValue("djd", "edjie");
c.Close();

Esto generaría el siguiente fichero llamado prueba.cfg.

[window]
width=640
height=480
# Activa la pantalla completa
fullscreen=0

[Otra]
# lalalalala
djd=edjie

Deja un comentario