C++ 检查多个文件类型的方法

C++ 检查多个文件类型的方法,c++,C++,我已经编写了一个程序,可以根据扩展名对文件进行分类。到目前为止,我正在根据if-else条件[下面的代码]对文件进行分组。我计划使用一个单独的类,然后在该类中保留所有文档类型。欢迎使用任何更简单的实现 if(it->path().extension() == ".txt"||it->path().extension() == ".doc"||it->path().extension() == ".docx"||it->path().extension() == ".pdf

我已经编写了一个程序,可以根据扩展名对文件进行分类。到目前为止,我正在根据if-else条件[下面的代码]对文件进行分组。我计划使用一个单独的类,然后在该类中保留所有文档类型。欢迎使用任何更简单的实现

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')";      
    }
我想避免其他条件。提前谢谢

最终返工代码:

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 + "')";                
std::map docTypes=boost::assign::map\u列表(“.txt”,“Documents”)(.pdf”,“Documents”)(.pdf”,“Documents”)(.rtf”,“Documents”)
(“.jpg”、“图片”)(“.jpeg”、“图片”)(“.gif”、“图片”)
(“.mp3”、“音频”)(“.mp4”、“音频”)
(“.wma”、“Video”)(“.flv”、“Video”);
f[0].filePath=it->path();
f[0].fileName=it->path().fileName();
std::map::iterator docIterator=docTypes.find(it->path().extension().string());
if(docIterator!=docTypes.end())
{
类别=docIterator->second;
}
其他的
{
类别=“其他”;
}
query=“在文件管理器(文件路径、文件名、类别)中插入值('”+f[0]。文件路径。字符串()+“,'”+f[0]。文件名。字符串()+“,”+Category+”)”;

u重复代码太多,可以创建一个带有扩展名的方法并返回它应该位于的文件夹,然后将此文件存储在返回的文件夹中

u重复代码太多,可以创建一个带有扩展名的方法并返回它应该位于的文件夹,然后将此文件存储在返回的文件夹中

尝试以下操作:(我没有编译它,因此可能会有一些错误)

std::map extMap;
//把你的分机放在这里。。。
insert(std::pair(“.txt”,0));
insert(std::pair(“.doc”,0));
insert(std::pair(“.mp3”,1));
...
//查找扩展及其索引
std::map::iterator it2=extMap.find(it->path().extension());
if(it2!=extMap.end()){
int index=it2->second;
f[index]。文件路径=。。。
}
试试这样的方法:(我没有编译它,所以它可能有一些错误)

std::map extMap;
//把你的分机放在这里。。。
insert(std::pair(“.txt”,0));
insert(std::pair(“.doc”,0));
insert(std::pair(“.mp3”,1));
...
//查找扩展及其索引
std::map::iterator it2=extMap.find(it->path().extension());
if(it2!=extMap.end()){
int index=it2->second;
f[index]。文件路径=。。。
}

我不得不使用
auto
,因为我不知道你的类型是什么。也没有错误检查(即,如果扩展不匹配)


我不得不使用
auto
,因为我不知道你的类型是什么。也没有错误检查(即,如果扩展不匹配)


这与避免if-then条件无关,但考虑到您将要返工代码

由于不知道您是否在“安全环境”中工作,我宁愿使用而不是在字符串中构造查询。这些都是更好的处理


SQL注入是应用程序安全中最容易被利用的问题之一,自2004年以来,SQL注入在OWASP前10名中占有一席之地。有许多关于SELECT查询注入的博客文章、论文,利用WHERE或HAVING子句,但也有。

这与避免if-then条件无关,但考虑到您将要重新编写代码

由于不知道您是否在“安全环境”中工作,我宁愿使用而不是在字符串中构造查询。这些都是更好的处理


SQL注入是应用程序安全中最容易被利用的问题之一,自2004年以来,SQL注入在OWASP前10名中占有一席之地。有很多关于SELECT查询、WHERE或HAVING子句的博客文章和论文,但也有。

谢谢。我会这样做。但我的主要问题是,有没有最好的方法将扩展分组然后使用它们。谢谢。我会这样做。但我的主要问题是,有没有一种最好的方法可以对扩展进行分组并使用它们。您可以用一种更简单的方式初始化映射:谢谢@JohnZwinck,好主意:)+1您可以用一种更简单的方式初始化映射:谢谢@JohnZwinck,好主意:)+1
std::map<std::string,int> extMap;

// put your extensions here...
extMap.insert( std::pair<std::string,int>(".txt", 0) );
extMap.insert( std::pair<std::string,int>(".doc", 0) );

extMap.insert( std::pair<std::string,int>(".mp3", 1) );
...

// find an extension and its index
std::map<std::string,int>::iterator it2 = extMap.find( it->path().extension() );

if( it2 != extMap.end() ) {
    int index = it2->second;

    f[index].filePath = ...
}
auto path = it->path();
auto extension = path.extension();

int index = -1;
auto queryFolder = "";

    if (extension == ".txt" || extension == ".doc" || extension == ".docx" || extension == ".pdf") 
    {   
        index = 0;
        queryFolder = "Documents";
    }
    else if (extension == ".mp3" || extension == ".wma") 
    {      
        index = 1;
        queryFolder = "Music";
    }
    else if (extension == ".mp4") 
    {          
        index = 2;
        queryFolder = "Videos";
    }
    else if (extension == ".jpg" || extension == ".jpeg" || extension == ".gif") 
    {          
        index = 3;
        queryFolder = "Pictures";        
    }
    else 
    {     
        index = 4;
        queryFolder = "Others";
    }

    f[index].filePath = path;
    f[index].fileName = path.filename();
    f[index].fileExt = extension;     

    auto query = "Insert into Filemanager(Filepath,Filename,Category)values('" + f[index].filePath.string() + "','" + f[index].fileName.string() + "','";
    query += queryFolder;
    query += "')";