1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-16 10:19:47 +02:00
vcmi/lib/Filesystem/CFileInfo.cpp

106 lines
2.0 KiB
C++
Raw Normal View History

#include "StdInc.h"
#include "CFileInfo.h"
CFileInfo::CFileInfo() : name("")
{
}
CFileInfo::CFileInfo(const std::string & name)
: name(name)
{
}
bool CFileInfo::exists() const
{
return boost::filesystem::exists(name);
}
bool CFileInfo::isDirectory() const
{
return boost::filesystem::is_directory(name);
}
void CFileInfo::setName(const std::string & name)
{
this->name = name;
}
std::string CFileInfo::getName() const
{
return name;
}
std::string CFileInfo::getPath() const
{
size_t found = name.find_last_of("/\\");
return name.substr(0, found);
}
std::string CFileInfo::getExtension() const
{
// Get position of file extension dot
size_t dotPos = name.find_last_of("/.");
if(dotPos != std::string::npos && name[dotPos] == '.')
return name.substr(dotPos);
else
return "";
}
std::string CFileInfo::getFilename() const
{
size_t found = name.find_last_of("/\\");
return name.substr(found + 1);
}
std::string CFileInfo::getStem() const
{
std::string rslt = name;
// Remove file extension
size_t dotPos = name.find_last_of("/.");
if(dotPos != std::string::npos && name[dotPos] == '.')
rslt.erase(dotPos);
// Remove path
size_t found = rslt.find_last_of("/\\");
return rslt.substr(found + 1);
}
EResType CFileInfo::getType() const
{
return EResTypeHelper::getTypeFromExtension(getExtension());
}
std::time_t CFileInfo::getDate() const
{
return boost::filesystem::last_write_time(name);
}
std::unique_ptr<std::list<CFileInfo> > CFileInfo::listFiles(const std::string & extensionFilter /*= ""*/) const
{
std::unique_ptr<std::list<CFileInfo> > fileListPtr;
if(exists() && isDirectory())
{
std::list<CFileInfo> * fileList = new std::list<CFileInfo>;
boost::filesystem::directory_iterator enddir;
for(boost::filesystem::directory_iterator it(name); it != enddir; ++it)
{
if(extensionFilter == "" || it->path().extension() == extensionFilter)
{
CFileInfo file(it->path().string());
fileList->push_back(file);
}
}
fileListPtr.reset(fileList);
}
return fileListPtr;
}