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.
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.
Exemple d'accorder 0777 à tous les fichiers et dossiers dans un répertoire en utilisant 17 C++ et son std::filesystem
:
std::filesystem::recursive_directory_iterator()
à itérer dans le répertoirestd::filesystem::permissions
pour définir les autorisations pour chaque fichierstd::filesystem::perms
de décider, les autorisations doivent être définiesCode:
#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.
Avez-vous considéré boost: système de fichiers? – drescherjm
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
@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. –
[Qt] (https://www.qt.io) a des classes qui peuvent vous aider avec ça. –
Les plates-formes non * all * prennent en charge les dossiers, en particulier ceux de la zone Embedded Systems. –