Added proper implementation of cFile::ChangeFileExt().
This commit is contained in:
parent
4836d07bfa
commit
65a1158e40
@ -62,6 +62,7 @@ function Initialize(Plugin)
|
|||||||
TestStringBase64()
|
TestStringBase64()
|
||||||
-- TestUUIDFromName()
|
-- TestUUIDFromName()
|
||||||
-- TestRankMgr()
|
-- TestRankMgr()
|
||||||
|
TestFileExt()
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
-- Test cCompositeChat usage in console-logging:
|
-- Test cCompositeChat usage in console-logging:
|
||||||
@ -79,6 +80,18 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function TestFileExt()
|
||||||
|
assert(cFile:ChangeFileExt("fileless_dir/", "new") == "fileless_dir/")
|
||||||
|
assert(cFile:ChangeFileExt("pathless_file.ext", "new") == "pathless_file.new")
|
||||||
|
assert(cFile:ChangeFileExt("path/to/file.ext", "new") == "path/to/file.new")
|
||||||
|
assert(cFile:ChangeFileExt("path/to.dir/file", "new") == "path/to.dir/file.new")
|
||||||
|
assert(cFile:ChangeFileExt("path/to.dir/file.ext", "new") == "path/to.dir/file.new")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function TestPluginCalls()
|
function TestPluginCalls()
|
||||||
-- In order to test the inter-plugin communication, we're going to call Core's ReturnColorFromChar() function
|
-- In order to test the inter-plugin communication, we're going to call Core's ReturnColorFromChar() function
|
||||||
-- It is a rather simple function that doesn't need any tables as its params and returns a value, too
|
-- It is a rather simple function that doesn't need any tables as its params and returns a value, too
|
||||||
|
@ -456,10 +456,25 @@ AString cFile::ReadWholeFile(const AString & a_FileName)
|
|||||||
AString cFile::ChangeFileExt(const AString & a_FileName, const AString & a_NewExt)
|
AString cFile::ChangeFileExt(const AString & a_FileName, const AString & a_NewExt)
|
||||||
{
|
{
|
||||||
auto res = a_FileName;
|
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.push_back('.');
|
||||||
res.append(a_NewExt);
|
res.append(a_NewExt);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user