1 #ifndef QFATFS_H 2 #define QFATFS_H 3 4 #include <QtCore> 5 6 #include "QFat.h" 7 #include "QFatFile.h" 8 9 class FatIterator : public QAbstractFileEngineIterator 10 { 11 public: 12 FatIterator(QDir::Filters filters, const QStringList &nameFilters, QFat* fat, const QString& path, const QString& name); 13 14 bool hasNext() const; 15 QString next(); 16 QString currentFileName() const; 17 18 private: 19 QFat* m_fat; 20 QString m_fatpath; 21 QString m_name; 22 QString m_curPath; 23 24 FatTocEntries m_tocs; 25 int m_curIndex; 26 27 protected: 28 int getNextIndex() const; 29 30 }; 31 32 class QFatFsHandler : public QAbstractFileEngineHandler { 33 public: 34 QFatFsHandler(quint16 clusterCount=5120, quint16 clusterSize=2048) m_clusterCount(clusterCount)35 : m_clusterCount(clusterCount), m_clusterSize(clusterSize) {} 36 ~QFatFsHandler(); 37 QAbstractFileEngine* create(const QString& fileName) const; 38 39 private: 40 quint16 m_clusterCount; 41 quint16 m_clusterSize; 42 43 mutable QMutex mutex; 44 45 }; 46 47 class QFatEngine : public QAbstractFileEngine 48 { 49 public: 50 explicit QFatEngine(QFat* fat, const QString& path, const QString& name); 51 52 bool open(QIODevice::OpenMode mode); 53 qint64 read(char *data, qint64 maxlen); 54 qint64 readLine ( char * data, qint64 maxlen ); 55 qint64 write (const char * data, qint64 len); 56 bool close(); 57 bool remove(); 58 bool flush (); setSize(qint64)59 bool setSize ( qint64 /*size*/ ) { return true; } 60 61 QString fileName(FileName file) const; 62 Iterator* beginEntryList(QDir::Filters filters, const QStringList &filterNames); 63 caseSensitive()64 bool caseSensitive () const { return true; } size()65 qint64 size() const { return m_toc.size; } 66 QDateTime fileTime ( FileTime time ) const; fileFlags(FileFlags)67 FileFlags fileFlags(FileFlags) const { return m_flags; } supportsExtension(Extension)68 bool supportsExtension ( Extension ) const { return QAbstractFileEngine::AtEndExtension; } 69 bool extension ( Extension extension, const ExtensionOption * option = 0, ExtensionReturn * output = 0 ); isSequential()70 bool isSequential () const { return false; } 71 72 bool mkdir ( const QString & dirName, bool createParentDirectories ) const; 73 bool rmdir ( const QString & dirName, bool recurseParentDirectories ) const; 74 pos()75 qint64 pos () const { return fatFile->pos(); } 76 bool seek ( qint64 offset ); 77 signals: 78 79 public slots: 80 81 private: 82 QFat* m_fat; 83 QString m_fatpath; 84 QString m_name; 85 FileFlags m_flags; 86 FatTocEntry m_toc; 87 88 QFatFile* fatFile; 89 }; 90 91 #endif // QFATFS_H 92