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 
53  bool open(DirHandle dir, const String& name, OpenFlags openFlags = OpenFlag::Read);
54 
57  void close();
58 
59  StreamType getStreamType() const override
60  {
61  return eSST_File;
62  }
63 
64  size_t write(const uint8_t* buffer, size_t size) override;
65 
66  int read() override
67  {
68  char c;
69  return readBytes(&c, 1) ? static_cast<unsigned char>(c) : -1;
70  }
71 
72  size_t readBytes(char* buffer, size_t length) override;
73 
74  uint16_t readMemoryBlock(char* data, int bufSize) override;
75 
76  int seekFrom(int offset, SeekOrigin origin) override;
77 
78  bool isFinished() override
79  {
80  auto fs = getFileSystem();
81  return fs == nullptr || lastError != FS_OK || fs->eof(handle) != 0;
82  }
83 
87  String fileName() const;
88 
92  bool fileExist() const
93  {
94  return handle >= 0;
95  }
96 
97  String getName() const override
98  {
99  return fileName();
100  }
101 
102  MimeType getMimeType() const override;
103 
104  bool isValid() const override
105  {
106  return fileExist();
107  }
108 
112  size_t getPos() const
113  {
114  return pos;
115  }
116 
120  size_t getSize() const
121  {
122  return size;
123  }
124 
128  int available() override
129  {
130  return size - pos;
131  }
132 
133  String id() const override;
134 
139  bool truncate(size_t newSize);
140 
144  bool truncate()
145  {
146  return truncate(pos);
147  }
148 
149  bool stat(Stat& s)
150  {
151  GET_FS(false)
152 
153  return check(fs->fstat(handle, &s));
154  }
155 
156 private:
157  FileHandle handle{-1};
158  size_t pos{0};
159  size_t size{0};
160 };
161 
162 } // 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:66
~FileStream()
Definition: IFS/FileStream.h:27
FsBase(IFileSystem *filesys)
Definition: FsBase.h:36
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:120
bool isFinished() override
Check if all data has been read.
Definition: IFS/FileStream.h:78
bool check(int res)
Check file operation result and note error code.
Definition: FsBase.h:76
struct ImplFileDir * DirHandle
Definition: IFileSystem.h:68
The String class.
Definition: WString.h:136
void close()
Close file.
bool stat(Stat &s)
Definition: IFS/FileStream.h:149
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
bool fileExist() const
Determine if file exists.
Definition: IFS/FileStream.h:92
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:128
size_t getPos() const
Get the offset of cursor from beginning of data.
Definition: IFS/FileStream.h:112
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:104
StreamType
Data stream type.
Definition: DataSourceStream.h:26
File data stream.
Definition: DataSourceStream.h:29
#define GET_FS(failure)
Definition: FsBase.h:27
File Status structure.
Definition: Stat.h:51
Manage a set of bit values using enumeration.
Definition: BitSet.h:43
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:59
String getName() const override
Returns name of the resource.
Definition: IFS/FileStream.h:97
bool truncate()
Truncate file at current position.
Definition: IFS/FileStream.h:144
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
MimeType
Definition: WebConstants.h:53
constexpr ErrorCode FS_OK
Definition: Error.h:128
int lastError
Definition: FsBase.h:87