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.
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.
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.
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.
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.
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 ++.
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 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.