PLCnext API Documentation  21.9.0.40
FileStream.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Core/Arp.h"
8 #include "Arp/System/Commons/Io/Stream.hpp"
9 #include "Arp/System/Commons/Io/FileMode.hpp"
10 #include "Arp/System/Commons/Io/FileAccess.hpp"
11 
12 // forwards
13 namespace Arp { namespace System { namespace Ve
14 {
15 class IFileService;
16 }}}
17 
18 namespace Arp { namespace System { namespace Commons { namespace Io
19 {
20 
24 class FileStream : public Stream
25 {
26 public: // typedefs/usings
27  using IFileService = Arp::System::Ve::IFileService;
28 
29 public: // construction/destruction
30 
41  FileStream(const String& path, FileMode mode);
42 
53  FileStream(const String& path, FileMode mode, FileAccess access);
54 
66  FileStream(const String& path, FileMode mode, FileAccess access, bool sync);
67 
69  FileStream(const FileStream& arg) = delete;
70 
72  FileStream& operator=(const FileStream& arg) = delete;
73 
75  ~FileStream(void)override;
76 
77 public: // setter/getter operations
80  boolean CanRead(void) override;
81 
84  boolean CanWrite(void) override;
85 
88  boolean CanSeek(void) override;
89 
93  size_t GetLength(void) override;
94 
99  void SetLength(size_t length) override;
100 
105  size_t GetPosition(void) override;
106 
111  void SetPosition(size_t position) override;
112 
113 
114 public: // operations
117  void Flush(void) override;
118 
124  size_t Seek(size_t offset, SeekOrigin origin) override;
125 
139  size_t Read(byte* pBuffer, size_t bufferSize, size_t offset, size_t count) override;
140 
154  void Write(const byte* pBuffer, size_t bufferSize, size_t offset, size_t count) override;
155 
156 protected: // operations
157  void InternalDispose(void) override;
158 
159 private: // methods
160  void InternalConstructor(const String& path, FileMode mode, FileAccess access);
161  void InternalConstructor(const String& path, FileMode mode, FileAccess access, bool sync);
162 
163 private: // fields
164  // flags storing internal status bits
165  boolean canRead = false;
166  boolean canWrite = false;
167  boolean canSeek = false;
168  // containing path and filename including extension
169  String pathName;
170  // native FileStream object providing system dependent part of implementation
171  IFileService* pFileService = nullptr;
172 };
173 
175 // inline methods of class FileStream
176 
177 inline FileStream::FileStream(const String& path, FileMode mode)
178 {
179  this->InternalConstructor(path, mode, FileAccess::ReadWrite);
180 }
181 
182 inline FileStream::FileStream(const String& path, FileMode mode, FileAccess access)
183 {
184  this->InternalConstructor(path, mode, access);
185 }
186 
187 inline FileStream::FileStream(const String& path, FileMode mode, FileAccess access, bool sync)
188 {
189  this->InternalConstructor(path, mode, access, sync);
190 }
191 
192 }}}} // end of namespace Arp::System::Commons::Io
Specifies write access to the file. Data can be written to the file and the file pointer can be moved...
FileMode
Contains constants for specifying how the OS should open a file.
Definition: FileMode.hpp:23
Provides a generic view of a sequence of bytes.
Definition: Stream.hpp:19
Specifies read access to the file. Data can be read from the file and the file pointer can be moved...
Root namespace for the PLCnext API
FileAccess
Contains constants for specifying the access you want for a file. You can have Read, Write or ReadWrite access.
Definition: FileAccess.hpp:17
Exposes a Stream around a file, supporting read and write operations.
Definition: FileStream.hpp:24
SeekOrigin
Provides seek reference points. To seek to the end of a stream, call stream.Seek(0, SeekOrigin.End).
Definition: SeekOrigin.hpp:19
System components used by the System, Device, Plc or Io domains.
unsigned char byte
The Arp character type.
Definition: PrimitiveTypes.hpp:23