#include "IFSContentProvider.h" #include "../../log/CLog.h" namespace LifeCore { static const String pakPathSplitter(_text("\\")); IFSContentProvider::IFSContentProvider(const String& file) { IFSFolder* folder = new IFSFolder(); g_rootFolder = file; folder->Provider = this; folder->Name = GetDirectoryName(file); folder->EntryName = file; fileSystem = new IFileSystem(folder); IFolder* root = fileSystem->GetRootFolder(); //printf("%s", file.c_str()); ScanDir(file, root); } IFSContentProvider::~IFSContentProvider() { if(fileSystem) delete fileSystem; } void IFSContentProvider::ScanDir( String path, IFolder* directory) { WIN32_FIND_DATA FindData; String modified_address = path; DWORD tmp = 0; modified_address += _text("*"); HANDLE Handle = FindFirstFile(modified_address.c_str() , &FindData); while( FindNextFile(Handle, &FindData) ) { String file_name = FindData.cFileName; if( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { if(STRCMP(FindData.cFileName, _text(".."))) { String new_path = path; new_path += file_name; new_path += _text("\\"); IFSFolder* folder = new IFSFolder(); folder->Provider = this; folder->Name = file_name; folder->EntryName = new_path; directory->AddFolder(folder); ScanDir( new_path, folder ); } } else { String filepath = path + file_name; HANDLE hf = CreateFile(filepath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); IFSFile* file = new IFSFile(); file->FileName = file_name; file->Provider = this; file->Size = GetFileSize(hf,&tmp); file->EntryName = filepath; directory->AddFile(file); CloseHandle(hf); } } } }