web-dev-qa-db-fra.com

Obtenir le nom de fichier (ou le chemin) de fstream

Puis-je obtenir un nom de fichier ou son chemin à partir d'un objet fstream? J'ai regardé les méthodes de fstream et je n'ai rien trouvé de proche.

43
Pavel Oganesyan

Non, ce n'est pas possible, du moins dans l'implémentation conforme Standard de la bibliothèque.

La classe fstream ne stocke pas le nom de fichier et ne fournit aucune fonction pour le récupérer.

Donc, une façon de garder une trace de ces informations est d'utiliser std::map comme:

std::map<std::fstream*, std::string> stream_file_table;

void f()
{
  //when you open a file, do this:
  std::fstream file("somefile.txt");

  stream_file_table[&file] = "somefile.txt"; //store the filename

  //..
  g(file);
}
void g(std::fstream & file)
{
    std::string filename = stream_file_table[&file]; //get the filename
    //...
}

Ou, passez simplement le nom du fichier également.

41
Nawaz

vous pouvez également concevoir une petite classe qui hérite de fstream et se comporte comme un fstream mais stocke également son nom de fichier.

23
Walter