-4

重複の可能性:
C++ での文字列の分割

ファイルをコピーするプログラムがあります。

ディレクトリパスである文字列がありますが、それは単なるファイル名である可能性があります。例えば:

rootdirname\childdirname\filename.ini

または次のようになります。

filename.ini

私はまだC ++に慣れていないので、文字列を分割し\てディレクトリを作成する必要がありますMKDir.

文字列を分割する方法を知っている人はいますか??

4

3 に答える 3

1

文字列をどのように定義しているかはわかりませんが、char *の場合は、strtokを使用できます。http://www.cplusplus.com/reference/clibrary/cstring/strtok/

于 2012-07-18T08:12:13.553 に答える
0

このCソリューションを使用できます。

http://www.cplusplus.com/reference/clibrary/cstring/strtok/

これにより、文字列を多くのトークンに分割できます。「/」の文字列を好きなように滑らせます。

Stackoverflowにもこの答えがあります。これは役立つと思います。

C ++で文字列をトークン化するにはどうすればよいですか?

于 2012-07-18T08:11:47.913 に答える
0

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 );
}
于 2012-07-18T08:19:20.323 に答える