可能重复:
在 C++ 中拆分字符串
我有一个复制文件的程序。
我有一个字符串,它是一个目录路径,但它可能只是一个文件名。例如:
rootdirname\childdirname\filename.ini
或者它可能是:
filename.ini
我对 C++ 还是很陌生,我需要拆分字符串\并使用MKDir.
有人知道如何拆分字符串吗?
可能重复:
在 C++ 中拆分字符串
我有一个复制文件的程序。
我有一个字符串,它是一个目录路径,但它可能只是一个文件名。例如:
rootdirname\childdirname\filename.ini
或者它可能是:
filename.ini
我对 C++ 还是很陌生,我需要拆分字符串\并使用MKDir.
有人知道如何拆分字符串吗?
我不确定你是如何定义你的字符串的,但如果它是一个 char*,你可以使用 strtok。http://www.cplusplus.com/reference/clibrary/cstring/strtok/
您可以使用此 C 解决方案:
http://www.cplusplus.com/reference/clibrary/cstring/strtok/
这允许您将字符串拆分为多个标记。您可以随意将字符串滑到“/”上。
Stackoverflow 中也有这个答案,我认为它会有所帮助:
在 linux 上重新发明了轮子
#include <string>
#include <sys/statfs.h>
bool existsDir( const std::string& dir ) {
    return existsFile( dir );
}
bool existsFile( const std::string& file ) {
    struct stat fileInfo;
    int error = stat( file.c_str(), &fileInfo );
    if( error == 0 ){
        return true;
    } else {
        return false;
    }
}
bool createDir( std::string dir, int mask = S_IRWXU | S_IRWXG | S_IRWXO ) {
    if( !existsDir( dir ) ) {
        mkdir( dir.c_str(), mask );
        return existsDir( dir );
    } else {
        return true;
    }
}
bool createPath( std::string path, int mask = S_IRWXU | S_IRWXG | S_IRWXO ) {
    if( path.at( path.length()-1 ) == '/' ){
        path.erase( path.length()-1 );
    }
    std::list<std::string> pathParts;
    int slashPos = 0;
    while( true ) {
        slashPos = path.find_first_of( "/", slashPos+1 );
        if( slashPos < 0)
            break;
        std::string pp( path.substr( 0, slashPos ) );
        pathParts.push_back( pp );
    }
    std::list<std::string>::const_iterator pp_cit;
    for( pp_cit=pathParts.begin(); pp_cit!=pathParts.end(); ++pp_cit ){
        createDir( (*pp_cit), mask );
    }
    createDir( path, mask );
    return existsDir( path );
}