1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00
vcmi/lib/Filesystem/CFileInfo.cpp
Michał W. Urbańczyk cd63c177e2 * std::unordered_map implementation in MSVC 10 has terribly slow destructor. Since bug is fixed only in VC11, I replaced it with boost::unordered_map.
* fixed crash with invalid .lod archive (some H3 installations have fake 1 byte .lod "archives"
* fixed crash when parsing invalid map file
* minor random optimizations (rv-refs, etc)
2012-08-08 08:25:27 +00:00

96 lines
1.6 KiB
C++

#include "StdInc.h"
#include "CFileInfo.h"
CFileInfo::CFileInfo() : name("")
{
}
CFileInfo::CFileInfo(std::string name)
: name(std::move(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);
return rslt;
}
std::string CFileInfo::getBaseName() const
{
size_t begin = name.find_last_of("/");
size_t end = name.find_last_of("/.");
if(end != std::string::npos && name[end] == '/')
end = std::string::npos;
if(begin == std::string::npos)
begin = 0;
else
begin++;
return name.substr(begin, end - begin);
}
EResType::Type CFileInfo::getType() const
{
return EResTypeHelper::getTypeFromExtension(getExtension());
}
std::time_t CFileInfo::getDate() const
{
return boost::filesystem::last_write_time(name);
}