PLCnext API Documentation  21.0.0.35466
FileSystemInfo.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Core/Arp.h"
8 #include <list>
9 
10 namespace Arp { namespace System { namespace Commons { namespace Io
11 {
12 
14 {
15 public: // typedefs
16  enum class Traits
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
26  {
27  NoPerms = 0,
28 
29  OthersExe = 01,
30  OthersWrite = 02,
31  OthersRead = 04,
32  OtherAll = 07,
33 
34  GroupExe = 010,
35  GroupWrite = 020,
36  GroupRead = 040,
37  GroupAll = 070,
38 
39  OwnerExe = 0100,
40  OwnerWrite = 0200,
41  OwnerRead = 0400,
42  OwnerAll = 0700,
43 
44  AllAll = 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 
56 public: // construction/destruction
58  FileSystemInfo(void) = delete;
60  FileSystemInfo(const FileSystemInfo& arg) = delete;
62  FileSystemInfo& operator=(const FileSystemInfo& arg) = delete;
64  ~FileSystemInfo(void) = delete;
65 
66 public: // operators
67 
68 public: // static operations
69  static Traits GetSupportedTraits(void);
70  static uint64 GetSize(const String& path);
71  static uint32 CalculateCrc32(const String& path);
72  static DateTime GetLastWriteTime(const String& path);
73  static void SetLastWriteTime(const String& path, const DateTime& newLastWriteTime);
74  static SpaceInfo GetSpaceInfo(const String& path);
75 
76  static Permissions GetPermissions(const String& path);
77  static void AddPermissions(const String& path, Permissions permissions);
78  static void RemovePermissions(const String& path, Permissions permissions);
79 
80  static boolean IsDirectory(const String& path);
81  static boolean IsFile(const String& path);
82 
83  static RootDirectoriesList GetRootDirectories(void);
84 
85 public: // setter/getter operations
86 
87 public: // operations
88 
89 protected: // operations
90 
91 private: // static methods
92 
93 private: // methods
94 
95 private: // fields
96 
97 private: // static fields
98 
99 };
100 
102 // inline methods of class FileSystemInfo
103 
104 inline constexpr FileSystemInfo::Traits operator&(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
105 {
106  return static_cast<FileSystemInfo::Traits>(static_cast<int32>(lhs) & static_cast<int32>(rhs));
107 }
108 
109 inline constexpr FileSystemInfo::Traits operator|(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
110 {
111  return static_cast<FileSystemInfo::Traits>(static_cast<int32>(lhs) | static_cast<int32>(rhs));
112 }
113 
114 inline constexpr FileSystemInfo::Permissions operator&(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
115 {
116  return static_cast<FileSystemInfo::Permissions>(static_cast<int32>(lhs) & static_cast<int32>(rhs));
117 }
118 
119 inline constexpr FileSystemInfo::Permissions operator|(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
120 {
121  return static_cast<FileSystemInfo::Permissions>(static_cast<int32>(lhs) | static_cast<int32>(rhs));
122 }
123 
124 }}}} // end of namespace Arp::System::Commons::Io
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:35
The class contains date and time informations.
Definition: DateTime.hpp:44
FileSystemInfo & operator=(const FileSystemInfo &arg)=delete
Assignment operator.
Root namespace for the PLCnext API
Definition: FileSystemInfo.hpp:13
std::uint64_t uint64
The Arp unsigned integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:39
std::int32_t int32
The Arp integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:37
System components used by the System, Device, Plc or Io domains.
FileSystemInfo(void)=delete
Constructs an FileSystemInfo instance.
~FileSystemInfo(void)=delete
Destructs this instance and frees all resources.