PLCnext API Documentation  21.9.0.40
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, // 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 
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: // static operations
67  static Traits GetSupportedTraits(void);
68  static uint64 GetSize(const String& path);
69  static uint32 CalculateCrc32(const String& path);
70  static DateTime GetLastWriteTime(const String& path);
71  static void SetLastWriteTime(const String& path, const DateTime& newLastWriteTime);
72  static SpaceInfo GetSpaceInfo(const String& path);
73 
74  static Permissions GetPermissions(const String& path);
75  static void AddPermissions(const String& path, Permissions permissions);
76  static void RemovePermissions(const String& path, Permissions permissions);
77 
78  static boolean IsDirectory(const String& path);
79  static boolean IsFile(const String& path);
80 
81  static RootDirectoriesList GetRootDirectories(void);
82 };
83 
85 // inline methods of class FileSystemInfo
86 
87 inline constexpr FileSystemInfo::Traits operator&(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
88 {
89  return static_cast<FileSystemInfo::Traits>(static_cast<int32>(lhs) & static_cast<int32>(rhs));
90 }
91 
92 inline constexpr FileSystemInfo::Traits operator|(FileSystemInfo::Traits lhs, FileSystemInfo::Traits rhs)
93 {
94  return static_cast<FileSystemInfo::Traits>(static_cast<int32>(lhs) | static_cast<int32>(rhs));
95 }
96 
97 inline constexpr FileSystemInfo::Permissions operator&(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
98 {
99  return static_cast<FileSystemInfo::Permissions>(static_cast<int32>(lhs) & static_cast<int32>(rhs));
100 }
101 
102 inline constexpr FileSystemInfo::Permissions operator|(FileSystemInfo::Permissions lhs, FileSystemInfo::Permissions rhs)
103 {
104  return static_cast<FileSystemInfo::Permissions>(static_cast<int32>(lhs) | static_cast<int32>(rhs));
105 }
106 
107 }}}} // 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.