Remplacer un fichier par un autre =)

Fermé
Niwless Messages postés 6 Date d'inscription dimanche 29 septembre 2019 Statut Membre Dernière intervention 17 octobre 2019 - Modifié le 30 oct. 2019 à 09:32
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 30 oct. 2019 à 12:09
Bonjour,

Je suis en train de coder une application pas très compliquée. Mais je suis à un moment où j'ai besoin de remplacer un
.ini
par un autre.

Je voudrais savoir si quelqu'un pourrais m'aider car je n'ai aucune idée de quelle "code" je dois mettre pour cela.

Merci d'avance :)
A voir également:

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 30 oct. 2019 à 09:41
Bonjour,

En C++, pour écrire un fichier texte quelconque (pas forcément
.ini
), on utilise la classe
std::ofstream
du C++.

#include <iostream>
#include <fstream>

int main() {
    std::string filename("/tmp/toto.ini");
    std::ofstream ofs(filename);

    if (ofs) {
        ofs << "coucou" << std::endl
            << "hello" << std::endl;
        ofs.close();
    } else {
        std::cerr << "Cannot write " << filename << std::endl;
        return 1;
    }

    return 0;
}


Note que tu peux ouvrir le flux en écriture pour écrire :
  • "à la place" de l'ancien contenu du fichier (mode
    std::ofstream::out
    , le mode par défaut
  • "à la suite" (mode
    std::ofstream::app
    , pour "append").


Pour plus de détails, voir la documentation.

Bonne chance
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 30 oct. 2019 à 12:22
Salut Niwless,

Sous Windows un fichier .ini est un simple fichier texte qui peut contenir des paramètres utiles à une application. Du temps des systèmes 16bits (pré Windows95) le registre n'existait pas, et c'est ainsi que les paramètres étaient stockés (dans un fichier win.ini pour le système et dans un fichier au nom choisi par le développeur pour les paramètres privés particuliers à son propre programme).

Un fichier 36264335.ini peut, par exemple, se présenter sous la forme suivante :

[SECTION1]
CLEF1=VALEUR1


Comme le dit mamiemando, vu qu'il s'agit d'un simple fichier texte, rien ne t’empêche d'utiliser de simples fonctions standard du C++ pour créer un fichier avec ce contenu.

Les fichiers .ini peuvent toutefois toujours être gérés par des applications avec l'API win32.

Concrètement, pour créer un fichier tel que celui-ci avec les fonctions de l'API Windows, tu peux écrire le programme suivant :


#include <stdio.h>
#include <windows.h>

#define MY_INI_FILE "C:\\Chemin\\vers\\mon_fichier\\36264335.ini"

int main(void) {
 if (!WritePrivateProfileStringA("SECTION1", "CLEF1", "VALEUR1", MY_INI_FILE)) {
  printf("Erreur %lu\n", GetLastError());
 }
 
 return 0;
}

Le fonctionnement de la fonction est décrit là : https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-writeprivateprofilestringa

Si le fichier .ini n'existe pas dans le répertoire mentionné, il est créé. S'il existe mais que la section n'existe pas, elle est créée et la clef et sa valeur aussi. Si le fichier existe, ainsi que la section, et la clef, la valeur de la clef est mise à jour, etc. (ce n'est qu'un aperçu des possibilités, vois la doc pour une description complète).

Tu peux appeler cette fonction successivement avec des valeurs différentes pour créer différentes sections, clefs et valeurs.

C'est la façon la plus basique de faire.

Tu peux aussi utiliser d'autres fonctions de la même famille WritePrivateProfileXXXX qui te permettent de faire des opérations plus complexes et optimisant mieux les appels système si tu as de nombreuses données à stocker, vois la doc Microsoft.

Note que ces fonctions sont maintenues par Microsoft pour assurer la compatibilité ascendante de fonctionnement d'anciens programmes. Microsoft décourage ce mode de stockage des paramètres des applications, car il a été rendu obsolète par le registre Windows.


Dal
0