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