Dans mon programme, une partie des ressources nécessaires est un répertoire pour stocker les données. Comme c'est la coutume, j'ai décidé de faire ce répertoire ~/.program/
. En C++, la bonne façon de rendre ce répertoire (sur les systèmes UNIX) est ce code:Utiliser une variable à l'intérieur d'une chaîne
#include <sys/stat.h>
#include <unistd.h>
#include <iostream>
using namespace std;
void mkworkdir()
{
if(stat("~/.program",&st) == 0)
{
cout << "Creating working directory..." << endl;
mkdir("~/.program/", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
mkdir("~/.program/moredata", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
}
else
{
cout << "Working directory found... continuing" << endl;
}
}
int main()
{
mkworkdir();
return 0;
}
Maintenant, la fiabilité de l'utilisation du ~
dans mkdir("~/.program/", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)
est discutable au moins, donc ce que je veux vraiment faire est invite pour le nom d'utilisateur, stocker cela dans un string
(comme string usern; cin >> usern;
), puis faire mkdir("/home/{$USERN}/.program/", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)
(comme dans shell). Cependant, je n'ai aucune idée de comment obtenir un équivalent de $ USERN dans une chaîne, comme dans, je ne sais pas comment obtenir une construction C++ extensible dans une chaîne. Ce que je veux dire par là, c'est que j'insère n'importe quelle "forme" de variable dans le contenu de cette variable. Je m'excuse si cette question est confuse, je ne peux pas sembler être capable d'expliquer bien ce que c'est exactement ce que je veux.
Alternativement, et de manière beaucoup plus préférable, serait-il possible d'obtenir le nom d'utilisateur sans le demander? (Et le stocker dans une chaîne, bien sûr)
Si seulement je pouvais marquer deux réponses comme réponses :( –
@DistantGraphics La réponse de Sahu est de loin meilleure, donc pas de soucis. – Ramon