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
#define GET_FS(failure)
Definition: FsBase.h:27
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
Manage a set of bit values using enumeration.
Definition: BitSet.h:45
virtual size_t readBytes(char *buffer, size_t length)
Read chars from stream into buffer.
File stream class.
Definition: IFS/FileStream.h:23
String id() const override
Returns unique id of the resource.
bool truncate()
Truncate file at current position.
Definition: IFS/FileStream.h:137
bool truncate(size_t newSize)
Reduce the file size.
int seekFrom(int offset, SeekOrigin origin) override
Change position in stream.
MimeType getMimeType() const override
Get MIME type for stream content.
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
bool open(const String &fileName, IFS::OpenFlags openFlags=OpenFlag::Read)
Open a file by path, and attach this stream object to it.
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
void attach(FileHandle file, size_t size)
Attach this stream object to an open file handle.
int read() override
Read one character and moves the stream pointer.
Definition: IFS/FileStream.h:57
StreamType getStreamType() const override
Get the stream type.
Definition: IFS/FileStream.h:50
bool fileExist() const
Determine if file exists.
Definition: IFS/FileStream.h:85
size_t write(const uint8_t *buffer, size_t size) override
Write chars to stream.
String getName() const override
Returns name of the resource.
Definition: IFS/FileStream.h:90
size_t getPos() const
Get the offset of cursor from beginning of data.
Definition: IFS/FileStream.h:105
int available() override
Return the maximum bytes available to read, from current position.
Definition: IFS/FileStream.h:121
size_t readBytes(char *buffer, size_t length) override
Read chars from stream into buffer.
~FileStream()
Definition: IFS/FileStream.h:27
void close()
Close file.
bool isValid() const override
Determine if the stream object contains valid data.
Definition: IFS/FileStream.h:97
String fileName() const
Filename of file stream is attached to.
bool stat(Stat &s)
Definition: IFS/FileStream.h:142
Definition: FsBase.h:34
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
int lastError
Definition: FsBase.h:94
FileSystem * getFileSystem() const
Definition: FsBase.h:63
Base class for read/write stream.
Definition: ReadWriteStream.h:20
The String class.
Definition: WString.h:137
StreamType
Data stream type.
Definition: DataSourceStream.h:25
@ eSST_File
< Memory stream where data can be safely written to.
Definition: DataSourceStream.h:30
constexpr ErrorCode FS_OK
Definition: Components/IFS/src/include/IFS/Error.h:130
MimeType
Definition: WebConstants.h:53
Definition: DirectoryTemplate.h:37
int16_t FileHandle
File handle.
Definition: Stat.h:40
File Status structure.
Definition: Stat.h:52