2017-10-19 5 views
0

Existe-t-il une méthode multiplate-forme pour définir de manière récursive les autorisations pour le contenu d'un dossier en C++?Définir l'autorisation pour tous les fichiers dans un dossier en C++

Je ne veux pas compter sur les appels système.

+0

[Qt] (https://www.qt.io) a des classes qui peuvent vous aider avec ça. –

+0

Les plates-formes non * all * prennent en charge les dossiers, en particulier ceux de la zone Embedded Systems. –

Répondre

0

Exemple d'accorder 0777 à tous les fichiers et dossiers dans un répertoire en utilisant 17 C++ et son std::filesystem:

Code:

#include <exception> 
//#include <filesystem> 
#include <experimental/filesystem> // Use this for most compilers as of yet. 

//namespace fs = std::filesystem; 
namespace fs = std::experimental::filesystem; // Use this for most compilers as of yet. 

int main() 
{ 
    fs::path directory = "change/permission/of/descendants"; 
    for (auto& path : fs::recursive_directory_iterator(directory)) 
    { 
     try { 
      fs::permissions(path, fs::perms::all); // Uses fs::perm_options::replace. 
     } 
     catch (std::exception& e) { 
      // Handle exception or use another overload of fs::permissions() 
      // with std::error_code. 
     }   
    } 
} 

Si par exemple fs::perm_options::add au lieu de fs::perm_options::replace est souhaité, alors ce n'est pas encore multiplate-forme. experimental/filesystem de VS17 ne connaît pas fs::perm_options et comprend add et remove comme fs::perms::add_perms et fs::perms::remove_perms à la place. Cela implique que la signature de std::filesystem::permissions est légèrement différente:

Std:

fs::permissions(path, fs::perms::all, fs::perm_options::add); 

vs17:

fs::permissions(path, fs::perms::add_perms | fs::perms::all); // VS17. 
+0

Avez-vous considéré boost: système de fichiers? – drescherjm

+0

Puisque vous mentionnez cette incompatibilité Visual Studio est-ce censé être la réponse ou cherchez-vous d'autres réponses et ce matériel aurait dû être dans la question ?? – drescherjm

+0

@drescherjm J'ai choisi cela comme réponse car il fonctionne tant que 'perm_options' n'est pas défini manuellement. Cependant, il est vrai que b/c de la deuxième partie pourrait également entrer dans la question. Désolé, je n'ai pas vu cela lors de la création de la question. –