--Bug fixes

-Remove illegal characters from filenames.
This commit is contained in:
Person
2020-11-30 19:32:02 -08:00
parent 73efd76bdd
commit 2b60d2b87e
3 changed files with 28 additions and 6 deletions

View File

@ -309,6 +309,22 @@ static void Rgba32ToRgba32Exr(v4F* rgba, float* r, float* g, float* b, float* a,
}
}
/// <summary>
/// Returns a string with all illegal file path characters removed.
/// </summary>
/// <param name="filename">The path to remove illegal characters from</param>
/// <returns>The cleaned full file path and name.</returns>
static string CleanPath(const string& filename)
{
static string illegalChars = "\\/:*?\"<>|";
auto tempfilename = filename;
for (auto& ch : illegalChars)
tempfilename.erase(remove(tempfilename.begin(), tempfilename.end(), ch), tempfilename.end());
return tempfilename;
}
/// <summary>
/// Make a filename for a single render. This is used in EmberRender.
/// </summary>
@ -340,7 +356,7 @@ static string MakeSingleFilename(const string& path, const string& out, const st
filename = fnstream.str();
}
return filename;
return CleanPath(filename);
}
/// <summary>
@ -356,7 +372,7 @@ static string MakeAnimFilename(const string& path, const string& prefix, const s
{
ostringstream fnstream;
fnstream << path << prefix << setfill('0') << setprecision(0) << fixed << setw(padding) << ftime << suffix << format;
return fnstream.str();
return CleanPath(fnstream.str());
}
/// <summary>

View File

@ -85,7 +85,7 @@ void FractoriumEmberController<T>::NewFlock(size_t count)
m_SheepTools->Random(ember, *filteredVariationsRef, static_cast<intmax_t>(QTIsaac<ISAAC_SIZE, ISAAC_INT>::LockedFrand<T>(-2, 2)), 0, 8);
ParamsToEmber(ember);
ember.m_Index = i;
ember.m_Name = m_EmberFile.m_Filename.toStdString() + "_" + ToString(i + 1ULL).toStdString();
ember.m_Name = CleanPath(m_EmberFile.m_Filename.toStdString() + "_" + ToString(i + 1ULL).toStdString());
m_EmberFile.m_Embers.push_back(ember);
}
@ -311,6 +311,8 @@ void FractoriumEmberController<T>::OpenAndPrepFiles(const QStringList& filenames
//Also ensure it has a name.
if (embers[i].m_Name == "" || embers[i].m_Name == "No name")
embers[i].m_Name = ToString<qulonglong>(i).toStdString();
else
embers[i].m_Name = CleanPath(embers[i].m_Name);
embers[i].m_Quality = m_Fractorium->m_QualitySpin->value();
embers[i].m_Supersample = m_Fractorium->m_SupersampleSpin->value();
@ -710,6 +712,8 @@ void FractoriumEmberController<T>::PasteXmlAppend()
//Also ensure it has a name.
if (embers[i].m_Name == "" || embers[i].m_Name == "No name")
embers[i].m_Name = ToString<qulonglong>(embers[i].m_Index).toStdString();
else
embers[i].m_Name = CleanPath(embers[i].m_Name);
m_EmberFile.m_Embers.push_back(embers[i]);//Will invalidate the pointers contained in the EmberTreeWidgetItems, UpdateLibraryTree() will resync.
}
@ -767,6 +771,8 @@ void FractoriumEmberController<T>::PasteXmlOver()
//Also ensure it has a name.
if (it.m_Name == "" || it.m_Name == "No name")
it.m_Name = ToString<qulonglong>(it.m_Index).toStdString();
else
it.m_Name = CleanPath(it.m_Name);
}
m_EmberFile.MakeNamesUnique();