to create valid file names, where songname is a user supplied string like “masterpiece” or “hell no”. This works fine if songname doesn’t contain a dot “.”, in which case the rest of the string is considered being an extension and skipped, thus giving problems with followups like “hell no. 2”. I find no function like “addExtension” that just adds an extension without parsing the filename after any existing one, so I guess I’ll have to roll my own?
If it’s a user-supplied string you should probably run it through File::createLegalFileName() before using it, as it could contain more surprises than just a dot!
I’ll just add “.xml” to the songname and do the simple sanity check as suggested by Jules. Until someone yells “you cannot do that, it wont work for [name of your favourite OS]”
Personally, I’d call createLegalFileName() on it, then remove any dots (or replace them with ‘_’ or something) and then use then normal withFileExtension method.
I settled with a solution where after sanitising the name with createLegalFileName() I replaced any occurence of dots with one of the “unsane” characters (@), which I now knew wouldn’t be in the name, and then after adding the extension, I rereplaced any @ with a dot.
TBH I suggested removing the dots because it’s probably not a great idea to create a filename that contains more than one dot. But whatever works for you!