Files

158 lines
2.8 KiB
C++
Raw Permalink Normal View History

2025-05-13 02:46:21 +03:00
#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;
}
}
}