2017-10-19 171 views
0

是否有跨平臺的方式遞歸設置C++文件夾內容的權限?設置C++文件夾中所有文件的權限

我不想依賴系統調用。

+0

[Qt的](https://www.qt.io)具有類,可以幫助你。 –

+0

非*所有*平臺都支持文件夾,尤其是嵌入式系統區域中的文件夾。 –

回答

0

實施例用C++ 17及其std::filesystem授予0777到目錄中的所有文件和文件夾:

代碼:

#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. 
     }   
    } 
} 

如果如fs::perm_options::add而不是fs::perm_options::replace是需要的,那麼這還不是跨平臺的。而VS17的experimental/filesystem不知道fs::perm_options,並且包括addremove作爲fs::perms::add_permsfs::perms::remove_perms。這意味着的std::filesystem::permissions簽名是稍有不同:

標準:

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

VS17:

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

你有沒有考慮過boost:文件系統? – drescherjm

+0

既然你提到這個Visual Studio的不兼容性,這是爲了答案,或者你在尋找其他答案,這個材料應該是在問題? – drescherjm

+0

@drescherjm我選擇這個作爲答案,因爲只要'perm_options'沒有手動設置,它就會工作。然而,第二部分的b/c確實也適用於這個問題。對不起,我在創建問題時沒有看到。 –