PLCnext API Documentation 25.0.2.69
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: // typedefs
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 typedef std::list<String> RootDirectoriesList;
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
79// inline methods of class FileSystemInfo
80
81constexpr FileSystemInfo::Traits operator&(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
82{
83 using U = std::underlying_type<FileSystemInfo::Traits>::type;
84 return static_cast<FileSystemInfo::Traits>(static_cast<U>(lhs) & static_cast<U>(rhs));
85}
86
87constexpr FileSystemInfo::Traits operator|(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
88{
89 using U = std::underlying_type<FileSystemInfo::Traits>::type;
90 return static_cast<FileSystemInfo::Traits>(static_cast<U>(lhs) | static_cast<U>(rhs));
91}
92
93constexpr FileSystemInfo::Permissions operator&(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
94{
95 using U = std::underlying_type<FileSystemInfo::Permissions>::type;
96 return static_cast<FileSystemInfo::Permissions>(static_cast<U>(lhs) & static_cast<U>(rhs));
97}
98
99constexpr FileSystemInfo::Permissions operator|(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
100{
101 using U = std::underlying_type<FileSystemInfo::Permissions>::type;
102 return static_cast<FileSystemInfo::Permissions>(static_cast<U>(lhs) | static_cast<U>(rhs));
103}
104
105}}}} // end of namespace Arp::System::Commons::Io
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