Files
2025-05-13 02:46:21 +03:00

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);
}
}
}
}