66 votes

Comment vérifier si un fichier existe et est lisible en C ++?

J'ai un fstream my_file ("test.txt"), mais je ne sais pas si test.txt existe. Si cela existe, j'aimerais savoir si je peux le lire aussi. Comment faire ça?

J'utilise Linux.

88voto

Kim Gräsman Points 5027

J'irais probablement avec:

 ifstream my_file("test.txt");
if (my_file.good())
{
  // read away
}
 

La méthode good vérifie si le flux est prêt à être lu.

22voto

Adam Badura Points 1517

Vous pouvez utiliser Boost.Filesystem . Il a une fonction boost::filesystem::exist .

Je ne sais pas comment vérifier les droits d'accès en lecture. Vous pouvez aussi regarder dans Boost.Filesystem . Cependant, il est probable qu'il n'y aura pas d'autre moyen (portable) que d'essayer de lire le fichier.

11voto

neoneye Points 11545

Si vous êtes sous unix, alors access () peut vous dire si c'est lisible. Cependant, si les ACL sont en cours d'utilisation, cela devient alors plus compliqué. Dans ce cas, il est préférable d'ouvrir simplement le fichier avec ifstream et d'essayer de lire. Si vous ne pouvez pas lire, l'ACL peut en interdire la lecture.

10voto

Pablo Santa Cruz Points 73944

Quel système d'exploitation / plate-forme?

Sous Linux / Unix / MacOSX, vous pouvez utiliser fstat .

Sous Windows, vous pouvez utiliser GetFileAttributes .

Habituellement, il n’existe aucun moyen portable de le faire avec les fonctions d’IO standard C / C ++.

2voto

druciferre Points 1330

Je sais que l'affiche finalement dit qu'ils étaient à l'utilisation de Linux, mais je suis un peu surpris que personne n'ait mentionné l' PathFileExists() les appels de l'API de Windows.

Vous aurez besoin d'inclure l' Shlwapi.lib bibliothèque et, Shlwapi.h fichier d'en-tête.

#pragma comment(lib, "shlwapi.lib")
#include <shlwapi.h>

la fonction retourne un BOOL de la valeur et peut être appelé de la sorte:

if( PathFileExists("C:\\path\\to\\your\\file.ext") )
{
    // do something
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X