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 
27  ~FileStream()
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
size_t getSize() const
Get the total file size.
Definition: IFS/FileStream.h:129
MimeType
Definition: WebConstants.h:53
The String class.
Definition: WString.h:136
FileSystem * getFileSystem() const
Definition: FsBase.h:81
File stream class.
Definition: FileStream.h:20
size_t write(const uint8_t *buffer, size_t size) override
Write chars to stream.
constexpr ErrorCode FS_OK
Definition: Components/IFS/src/include/IFS/Error.h:130
bool stat(Stat &s)
Definition: IFS/FileStream.h:158
int available() override
Return the maximum bytes available to read, from current position.
Definition: IFS/FileStream.h:137
bool check(int64_t res)
Check file operation result and note error code.
Definition: FsBase.h:101
size_t getPos() const
Get the offset of cursor from beginning of data.
Definition: IFS/FileStream.h:121
StreamType
Data stream type.
Definition: DataSourceStream.h:25
int16_t FileHandle
File handle.
Definition: Stat.h:59
Definition: DirectoryTemplate.h:36
bool isFinished() override
Check if all data has been read.
Definition: IFS/FileStream.h:87
size_t readBytes(char *buffer, size_t length) override
Read chars from stream into buffer.
bool fileExist() const
Determine if file exists.
Definition: IFS/FileStream.h:101
void close()
Close file.
File Status structure.
Definition: Stat.h:71
void attach(FileHandle file, size_t size)
Attach this stream object to an open file handle.
Manage a set of bit values using enumeration.
Definition: BitSet.h:44
String id() const override
Returns unique id of the resource.
bool open(const String &fileName, IFS::OpenFlags openFlags=OpenFlag::Read)
Open a file by path, and attach this stream object to it.
int lastError
Definition: FsBase.h:112
#define GET_FS(failure)
Definition: FsBase.h:45
size_t readBytes(char *buffer, size_t length) override
Read chars from stream into buffer.
StreamType getStreamType() const override
Get the stream type.
Definition: IFS/FileStream.h:66
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
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:113
FsBase(IFileSystem *filesys=nullptr)
Definition: FsBase.h:54
String getName() const override
Returns name of the resource.
Definition: IFS/FileStream.h:106
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
int seekFrom(int offset, SeekOrigin origin) override
Change position in stream.
~FileStream()
Definition: IFS/FileStream.h:43
@ eSST_File
< Memory stream where data can be safely written to.
Definition: DataSourceStream.h:30
MimeType getMimeType() const override
Get MIME type for stream content.
Base class for read/write stream.
Definition: ReadWriteStream.h:19
bool truncate()
Truncate file at current position.
Definition: IFS/FileStream.h:153
int read() override
Read one character and moves the stream pointer.
Definition: IFS/FileStream.h:73