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 
38  bool open(const Stat& stat, OpenFlags openFlags = OpenFlag::Read);
39 
46  bool open(const String& fileName, IFS::OpenFlags openFlags = OpenFlag::Read);
47 
50  void close();
51 
52  StreamType getStreamType() const override
53  {
54  return eSST_File;
55  }
56 
57  size_t write(const uint8_t* buffer, size_t size) override;
58 
59  int read() override
60  {
61  char c;
62  return readBytes(&c, 1) ? static_cast<unsigned char>(c) : -1;
63  }
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 private:
143  FileHandle handle{-1};
144  size_t pos{0};
145  size_t size{0};
146 };
147 
148 } // 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:59
~FileStream()
Definition: IFS/FileStream.h:27
FsBase(IFileSystem *filesys)
Definition: FsBase.h:30
int length()
Return the total length of the stream.
Definition: DataSourceStream.h:134
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
The String class.
Definition: WString.h:136
void close()
Close file.
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:39
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:26
File data stream.
Definition: DataSourceStream.h:29
File Status structure.
Definition: Stat.h:51
Manage a set of bit values using enumeration.
Definition: BitSet.h:43
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.
bool open(const Stat &stat, OpenFlags openFlags=OpenFlag::Read)
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:52
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:27
FileSystem * getFileSystem() const
Definition: FsBase.h:52
MimeType
Definition: WebConstants.h:53
constexpr ErrorCode FS_OK
Definition: Error.h:130
int lastError
Definition: FsBase.h:76