1
0

Added proper implementation of cFile::ChangeFileExt().

This commit is contained in:
Mattes D
2015-04-10 21:40:45 +02:00
parent 4836d07bfa
commit 65a1158e40
2 changed files with 31 additions and 3 deletions

View File

@@ -456,10 +456,25 @@ AString cFile::ReadWholeFile(const AString & a_FileName)
AString cFile::ChangeFileExt(const AString & a_FileName, const AString & a_NewExt)
{
auto res = a_FileName;
auto DotPos = res.rfind('.');
if (DotPos == AString::npos)
// If the path separator is the last character of the string, return the string unmodified (refers to a folder):
#ifdef _WIN32
auto LastPathSep = res.find_last_of("/\\"); // Find either path separator - Windows accepts slashes as separators, too
#else
auto LastPathSep = res.rfind('/');
#endif
if ((LastPathSep != AString::npos) && (LastPathSep + 1 == res.size()))
{
// No extension, just append it:
return res;
}
auto DotPos = res.rfind('.');
if (
(DotPos == AString::npos) || // No dot found
((LastPathSep != AString::npos) && (LastPathSep > DotPos)) // Last dot is before the last path separator (-> in folder name)
)
{
// No extension, just append the new one:
res.push_back('.');
res.append(a_NewExt);
}