IFS/FileStream.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * FileStream.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "../ReadWriteStream.h"
14 #include <IFS/FsBase.h>
15 
16 namespace IFS
17 {
22 class FileStream : public FsBase, public ReadWriteStream
23 {
24 public:
25  using FsBase::FsBase;
26 
28  {
29  close();
30  }
31 
36  void attach(FileHandle file, size_t size);
37 
44  bool open(const String& fileName, IFS::OpenFlags openFlags = OpenFlag::Read);
45 
48  void close();
49 
50  StreamType getStreamType() const override
51  {
52  return eSST_File;
53  }
54 
55  size_t write(const uint8_t* buffer, size_t size) override;
56 
57  int read() override
58  {
59  char c;
60  return readBytes(&c, 1) ? static_cast<unsigned char>(c) : -1;
61  }
62 
64 
65  size_t readBytes(char* buffer, size_t length) override;
66 
67  uint16_t readMemoryBlock(char* data, int bufSize) override;
68 
69  int seekFrom(int offset, SeekOrigin origin) override;
70 
71  bool isFinished() override
72  {
73  auto fs = getFileSystem();
74  return fs == nullptr || lastError != FS_OK || fs->eof(handle) != 0;
75  }
76 
80  String fileName() const;
81 
85  bool fileExist() const
86  {
87  return handle >= 0;
88  }
89 
90  String getName() const override
91  {
92  return fileName();
93  }
94 
95  MimeType getMimeType() const override;
96 
97  bool isValid() const override
98  {
99  return fileExist();
100  }
101 
105  size_t getPos() const
106  {
107  return pos;
108  }
109 
113  size_t getSize() const
114  {
115  return size;
116  }
117 
121  int available() override
122  {
123  return size - pos;
124  }
125 
126  String id() const override;
127 
132  bool truncate(size_t newSize);
133 
137  bool truncate()
138  {
139  return truncate(pos);
140  }
141 
142  bool stat(Stat& s)
143  {
144  GET_FS(false)
145 
146  return check(fs->fstat(handle, &s));
147  }
148 
149 private:
150  FileHandle handle{-1};
151  size_t pos{0};
152  size_t size{0};
153 };
154 
155 } // namespace IFS
MimeType getMimeType() const override
Get MIME type for stream content.
int read() override
Read one character and moves the stream pointer.
Definition: IFS/FileStream.h:57
~FileStream()
Definition: IFS/FileStream.h:27
size_t write(const uint8_t *buffer, size_t size) override
Write chars to stream.
size_t getSize() const
Get the total file size.
Definition: IFS/FileStream.h:113
bool isFinished() override
Check if all data has been read.
Definition: IFS/FileStream.h:71
size_t readBytes(char *buffer, size_t length) override
Read chars from stream into buffer.
MimeType
Definition: WebConstants.h:53
The String class.
Definition: WString.h:136
void close()
Close file.
bool stat(Stat &s)
Definition: IFS/FileStream.h:142
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
bool fileExist() const
Determine if file exists.
Definition: IFS/FileStream.h:85
int16_t FileHandle
File handle.
Definition: Stat.h:40
Definition: DirectoryTemplate.h:36
int available() override
Return the maximum bytes available to read, from current position.
Definition: IFS/FileStream.h:121
size_t getPos() const
Get the offset of cursor from beginning of data.
Definition: IFS/FileStream.h:105
void attach(FileHandle file, size_t size)
Attach this stream object to an open file handle.
String fileName() const
Filename of file stream is attached to.
bool isValid() const override
Determine if the stream object contains valid data.
Definition: IFS/FileStream.h:97
StreamType
Data stream type.
Definition: DataSourceStream.h:25
< Memory stream where data can be safely written to.
Definition: DataSourceStream.h:30
#define GET_FS(failure)
Definition: FsBase.h:27
FsBase(IFileSystem *filesys=nullptr)
Definition: FsBase.h:36
bool check(int64_t res)
Check file operation result and note error code.
Definition: FsBase.h:83
File Status structure.
Definition: Stat.h:52
Manage a set of bit values using enumeration.
Definition: BitSet.h:44
bool open(const String &fileName, IFS::OpenFlags openFlags=OpenFlag::Read)
Open a file by path, and attach this stream object to it.
String id() const override
Returns unique id of the resource.
size_t readBytes(char *buffer, size_t length) override
Read chars from stream into buffer.
File stream class.
Definition: IFS/FileStream.h:22
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
StreamType getStreamType() const override
Get the stream type.
Definition: IFS/FileStream.h:50
String getName() const override
Returns name of the resource.
Definition: IFS/FileStream.h:90
bool truncate()
Truncate file at current position.
Definition: IFS/FileStream.h:137
Base class for read/write stream.
Definition: ReadWriteStream.h:19
int seekFrom(int offset, SeekOrigin origin) override
Change position in stream.
Definition: FsBase.h:33
FileSystem * getFileSystem() const
Definition: FsBase.h:63
constexpr ErrorCode FS_OK
Definition: Components/IFS/src/include/IFS/Error.h:130
int lastError
Definition: FsBase.h:94