158 lines
2.8 KiB
C++
158 lines
2.8 KiB
C++
#include "IFileSystem.h"
|
|
#include "../log/CLog.h"
|
|
|
|
namespace LifeCore
|
|
{
|
|
/*IFolder* IFileSystem::GetFolder(const String& path)
|
|
{
|
|
String folder, rPath;
|
|
GetRootFolderS(path, folder, rPath);
|
|
|
|
if(folder.length()<2)
|
|
return g_rootFolder;
|
|
else if(folder.length() <1)
|
|
return (IFolder*)0;
|
|
if(rPath.length()<2)
|
|
{
|
|
if (folder == g_rootFolder->Name)
|
|
return g_rootFolder;
|
|
else
|
|
return g_rootFolder->GetFolder(folder);
|
|
}
|
|
else
|
|
{
|
|
IFolder* f = g_rootFolder;
|
|
IFolder* t;
|
|
do
|
|
{
|
|
GetRootFolderS(rPath, folder, rPath);
|
|
t = f->GetFolder(folder);
|
|
if(t)
|
|
{
|
|
f = t;
|
|
}
|
|
else
|
|
{
|
|
return f;
|
|
}
|
|
}
|
|
while(rPath.length()>1);
|
|
return f;
|
|
}
|
|
}
|
|
|
|
IFile* IFileSystem::GetFile(const String& path)
|
|
{
|
|
String dir = GetFilePath(path, String(_text("/")));
|
|
String file = GetFileName(path, String(_text("/")));
|
|
IFolder* f = GetFolder(dir);
|
|
if(f)
|
|
return f->GetFile(file);
|
|
return (IFile*)0;
|
|
}*/
|
|
int IFileSystem::NewFile(const String& path, int size)
|
|
{
|
|
String dir = GetFilePath(path, String(_text("/")));
|
|
String fileName = GetFileName(path, String(_text("/")));
|
|
IFolder* f;
|
|
if(GetFolder(dir, &f) != SC_OK)
|
|
{
|
|
if(this->CreateFolder(dir) != SC_OK)
|
|
return SC_FAIL;
|
|
|
|
if(GetFolder(dir, &f) != SC_OK)
|
|
return SC_FAIL;
|
|
}
|
|
|
|
IFile* file;
|
|
if(f->GetFile(fileName, &file) != SC_OK)
|
|
f->NewFile(fileName, size);
|
|
|
|
return SC_OK;
|
|
}
|
|
int IFileSystem::CreateFolder(const String& path)
|
|
{
|
|
String folder, rPath;
|
|
IFolder* f;
|
|
GetRootFolderS(path, folder, rPath);
|
|
if(folder == g_rootFolder->Name)
|
|
f = g_rootFolder;
|
|
else
|
|
return SC_FAIL;
|
|
|
|
do
|
|
{
|
|
GetRootFolderS(rPath, folder, rPath);
|
|
if(folder == STR(""))
|
|
return SC_OK;
|
|
else
|
|
{
|
|
if(f->GetFolder(folder, &f) != SC_OK)
|
|
{
|
|
f = f->NewFolder(folder);
|
|
}
|
|
}
|
|
} while (rPath != STR(""));
|
|
|
|
return SC_OK;
|
|
}
|
|
|
|
int IFileSystem::GetFile(const String& path, IFile** file)
|
|
{
|
|
String dir = GetFilePath(path, String(_text("/")));
|
|
String fileName = GetFileName(path, String(_text("/")));
|
|
IFolder* f;
|
|
if(GetFolder(dir, &f) == SC_OK)
|
|
return f->GetFile(fileName, file);
|
|
|
|
return SC_FAIL;
|
|
}
|
|
int IFileSystem::GetFolder(const String& path, IFolder** output)
|
|
{
|
|
String folder, rPath;
|
|
GetRootFolderS(path, folder, rPath);
|
|
|
|
if(folder.length()<2)
|
|
{
|
|
(*output) = g_rootFolder;
|
|
return SC_OK;
|
|
}
|
|
else if(folder.length() < 1)
|
|
{
|
|
return SC_FAIL;
|
|
}
|
|
if(rPath.length()<2)
|
|
{
|
|
if (folder == g_rootFolder->Name)
|
|
{
|
|
(*output) = g_rootFolder;
|
|
return SC_OK;
|
|
}
|
|
else
|
|
{
|
|
return g_rootFolder->GetFolder(folder, output);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
IFolder* f = g_rootFolder;
|
|
IFolder* t;
|
|
do
|
|
{
|
|
GetRootFolderS(rPath, folder, rPath);
|
|
if(f->GetFolder(folder, &t) == SC_OK)
|
|
{
|
|
f = t;
|
|
}
|
|
else
|
|
{
|
|
(*output) = f;
|
|
return SC_OK;
|
|
}
|
|
}
|
|
while(rPath.length() > 1);
|
|
(*output) = f;
|
|
return SC_OK;
|
|
}
|
|
}
|
|
} |