I have written a program which would categorize files based on their extensions.As of now,I am grouping them by if-else conditions[code below].I am planning to use a separate class and then in that class keep all the document types.Any more simple implementations are welcome.
if(it->path().extension() == ".txt"||it->path().extension() == ".doc"||it->path().extension() == ".docx"||it->path().extension() == ".pdf")
{
f[0].filePath=it->path();
f[0].fileName=it->path().filename();
f[0].fileExt=it->path().extension();
query="Insert into Filemanager(Filepath,Filename,Category)values('" + f[0].filePath.string() + "','" + f[0].fileName.string() + "','Documents')";
}
else if(it->path().extension() == ".mp3"||it->path().extension() == ".wma")
{
f[1].filePath=it->path();
f[1].fileName=it->path().filename();
f[1].fileExt=it->path().extension();
query="Insert into Filemanager(Filepath,Filename,Category)values('" + f[0].filePath.string() + "','" + f[0].fileName.string() + "','Music')";
}
else if(it->path().extension() == ".mp4")
{
f[2].filePath=it->path();
f[2].fileName=it->path().filename();
f[2].fileExt=it->path().extension();
query="Insert into Filemanager(Filepath,Filename,Category)values('" + f[0].filePath.string() + "','" + f[0].fileName.string() + "','Videos')";
}
else if(it->path().extension() == ".jpg"||it->path().extension() == ".jpeg"||it->path().extension() == ".gif")
{
f[3].filePath=it->path();
f[3].fileName=it->path().filename();
f[3].fileExt=it->path().extension();
query="Insert into Filemanager(Filepath,Filename,Category)values('" + f[0].filePath.string() + "','" + f[0].fileName.string() + "','Pictures')";
}
else
{
f[4].filePath=it->path();
f[4].fileName=it->path().filename();
f[4].fileExt=it->path().extension();
query="Insert into Filemanager(Filepath,Filename,Category)values('" + f[0].filePath.string() + "','" + f[0].fileName.string() + "','Others')";
}
I want to avoid if-else conditions.Thanks in advance.
Final Reworked code:
std::map<string,string> docTypes = boost::assign::map_list_of (".txt", "Documents") (".pdf", "Documents") (".pdf", "Documents") (".rtf", "Documents")
(".jpg", "Pictures") (".jpeg", "Pictures") (".gif", "Pictures")
(".mp3", "Audio") (".mp4", "Audio")
(".wma", "Video") (".flv", "Video");
f[0].filePath=it->path();
f[0].fileName=it->path().filename();
std::map<std::string,std::string>::iterator docIterator=docTypes.find(it->path().extension().string());
if( docIterator != docTypes.end() )
{
category = docIterator->second;
}
else
{
category="Others";
}
query="Insert into Filemanager(Filepath,Filename,Category)values('" + f[0].filePath.string() + "','" + f[0].fileName.string() + "','" + category + "')";