68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#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);
|
|
}
|
|
}
|
|
}
|
|
} |