PLCnext API Documentation 26.6.0.38
FileSystemInfo.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include <list>
9
10namespace Arp { namespace System { namespace Commons { namespace Io
11{
12
14{
15public: // usings
16 enum class Traits : int32
17 {
18 None = 0,
19 Permissions = (1 << 0),
20 LastWriteTime = (1 << 1),
21 Length = (1 << 2),
22 Crc32 = (1 << 3),
23 };
24
25 enum class Permissions : int32
26 {
27 NoPerms = 0, // 0
28
29 OthersExe = 1, // 01
30 OthersWrite = 2, // 02
31 OthersRead = 4, // 04
32 OtherAll = 7, // 07
33
34 GroupExe = 8, // 010
35 GroupWrite = 16, // 020
36 GroupRead = 32, // 040
37 GroupAll = 56, // 070
38
39 OwnerExe = 64, // 0100
40 OwnerWrite = 128, // 0200
41 OwnerRead = 256, // 0400
42 OwnerAll = 448, // 0700
43
44 AllAll = 511, // 0777
45 };
46
47 struct SpaceInfo
48 {
49 uint64 Capacity;
50 uint64 Free; // <= capacity
51 uint64 Available; // <= free
52 };
53
54 using RootDirectoriesList = std::list<String>;
55
56public: // construction/destruction
57 FileSystemInfo(void) = delete;
58
59public: // static operations
60 static Traits GetSupportedTraits(void);
61 static uint64 GetSize(const String& path);
62 static uint32 CalculateCrc32(const String& path);
63 static DateTime GetLastWriteTime(const String& path);
64 static void SetLastWriteTime(const String& path, const DateTime& newLastWriteTime);
65 static SpaceInfo GetSpaceInfo(const String& path);
66
67 static Permissions GetPermissions(const String& path);
68 static void AddPermissions(const String& path, Permissions permissions);
69 static void RemovePermissions(const String& path, Permissions permissions);
70 static void RemoveAllPermissions(const String& path);
71 static void SetPermissions(const String& path, Permissions permissions);
72 static boolean IsDirectory(const String& path);
73 static boolean IsFile(const String& path);
74
75 static RootDirectoriesList GetRootDirectories(void);
76
77 static String GetOwner(const String& path);
78 static String GetGroup(const String& path);
79};
80
82// global stream operators of enum FileSystemInfo::Permissions for logging and parsing
83ARP_CXX_SYMBOL_EXPORT std::ostream& operator<<(std::ostream& os, FileSystemInfo::Permissions value);
84ARP_CXX_SYMBOL_EXPORT std::istream& operator>>(std::istream& is, FileSystemInfo::Permissions& value);
85
87// inline methods of class FileSystemInfo
88
89constexpr FileSystemInfo::Traits operator&(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
90{
91 using U = std::underlying_type<FileSystemInfo::Traits>::type;
92 return static_cast<FileSystemInfo::Traits>(static_cast<U>(lhs) & static_cast<U>(rhs));
93}
94
95constexpr FileSystemInfo::Traits operator|(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
96{
97 using U = std::underlying_type<FileSystemInfo::Traits>::type;
98 return static_cast<FileSystemInfo::Traits>(static_cast<U>(lhs) | static_cast<U>(rhs));
99}
100
101constexpr FileSystemInfo::Permissions operator&(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
102{
103 using U = std::underlying_type<FileSystemInfo::Permissions>::type;
104 return static_cast<FileSystemInfo::Permissions>(static_cast<U>(lhs) & static_cast<U>(rhs));
105}
106
107constexpr FileSystemInfo::Permissions operator|(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
108{
109 using U = std::underlying_type<FileSystemInfo::Permissions>::type;
110 return static_cast<FileSystemInfo::Permissions>(static_cast<U>(lhs) | static_cast<U>(rhs));
111}
112
113constexpr FileSystemInfo::Permissions& operator&=(FileSystemInfo::Permissions& lhs, FileSystemInfo::Permissions rhs)
114{
115 lhs = lhs & rhs;
116 return lhs;
117}
118
119constexpr FileSystemInfo::Permissions& operator|=(FileSystemInfo::Permissions& lhs, FileSystemInfo::Permissions rhs)
120{
121 lhs = lhs | rhs;
122 return lhs;
123}
124
125constexpr FileSystemInfo::Permissions operator~(FileSystemInfo::Permissions arg)
126{
127 using U = std::underlying_type<FileSystemInfo::Permissions>::type;
128 return static_cast<FileSystemInfo::Permissions>(~static_cast<U>(arg));
129}
130
131
132}}}} // end of namespace Arp::System::Commons::Io
133
135// template specialization of FileSystemInfo::Permissions formatter
136template<> struct fmt::formatter<Arp::System::Commons::Io::FileSystemInfo::Permissions> : public fmt::ostream_formatter {};
This class contains date and time informations.
Definition: DateTime.hpp:27
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
Definition: FileSystemInfo.hpp:14
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:33
std::int32_t int32
The Arp integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:35
std::uint64_t uint64
The Arp unsigned integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:37
Root namespace for the PLCnext API