//========= Copyright Valve Corporation ============// #pragma once #include #include #if !defined(_WIN32) #include #include #endif extern bool BCreateDirectoryRecursive( const char *pchPath ); extern bool BCreateDirectory( const char *pchPath ); #if !defined( VRCORE_NO_PLATFORM ) // for finddata_t #include typedef void *HMDHANDLE; // iterator class, initialize with the path & pattern you want to want files/dirs for. // // all string setters and accessors use UTF-8 encoding. class CDirIterator { public: CDirIterator( const char *pchPath, const char *pchPattern ); ~CDirIterator(); bool IsValid() const; // fetch the next file bool BNextFile(); // name of the current file - file portion only, not full path std::string CurrentFileName(); // size of the current file int64_t CurrentFileLength() const; // creation time of the current file int64_t CurrentFileCreateTime() const; // mod time of the current file int64_t CurrentFileWriteTime() const; // mode/type checks: // is the current file actually a directory? bool BCurrentIsDir() const; // is the current file hidden? bool BCurrentIsHidden() const; // is the current file read-only? bool BCurrentIsReadOnly() const; // is the current file a system file? bool BCurrentIsSystem() const; // is the current file's archive bit set? bool BCurrentIsMarkedForArchive() const; private: void Init( const std::string &sPathAndPattern ); bool BValidFilename(); bool m_bNoFiles, m_bUsedFirstFile; #if defined( _WIN32 ) HMDHANDLE m_hFind; struct _WIN32_FIND_DATAW *m_pFindData; std::string m_sFilename; #else int64_t m_hFind; struct _finddata_t *m_pFindData; #endif }; #endif // VRCORE_NO_PLATFORM