boost (erste gehversuche) Pfad/Datei/Extension splitten



  • Hiho

    Habe heute meine ersten gehversuche in boost gestartet und gleich zwei fragen

    Gibt es eine gute library fuer alles wie man es von der MSDN kennt, ich hab schon das passende gefunden, aber da Intellisense meist den dienst verweigert bei boost, ist eine gute library noch notwendiger, allein members rausfinden war schon ne huerde #gg

    Ich habe mal ein vergleich angestellt wie es zwischen MFC CString und std::string boost laufen wuerde

    MFC

    CString strOrg = _T("C:\\Temp\\File.txt");
    int iBackSlash = strOrg.ReverseFind(_T('\\')) + 1;
    int iDot = strOrg.ReverseFind(_T('.'));
    int iLength = strOrg.GetLength();
    CString strPath = strOrg.Left(iBackSlash);                 // C:\Temp\
    CString strFile = strOrg.Mid(iBackSlash, iLength - iDot);  // File
    CString strExtension = strOrg.Right(iLength - iDot);       // .txt
    

    boost

    boost::filesystem::tpath TheFile(_T("C:\\Temp\\File.txt"));
    std::tstring strFile = boost::filesystem::basename(TheFile);       // File
    std::tstring strExtension = boost::filesystem::extension(TheFile); // .txt
    TheFile.remove_leaf();
    std::tstring strPath = TheFile.file_string();                      // C:\Temp\
    

    ich habe zum ermitteln des strPath an dieser stelle file_string verwendet, da ich gesehen habe das es ueberhaupt keine rolle spielt was ich benutze, ich muss den dateinamen mit remove_leaf vorher rauswerfen

    gibt es eine moeglichkeit das ich den pfad direkt bekomm ohne ihn vorher mit remove_leaf manipulieren zu muessen?



  • hier is erstma die doku: http://boost.org/libs/filesystem/doc/index.htm
    vielleicht is hier was dabei: http://boost.org/libs/filesystem/doc/tr2_proposal.html#basic_path-observers

    vielleicht path::root_path oder path::branch_path ? aber das müsste denk ich gehen.



  • ueber diese doku hatte ich es schon rausgefunden, find die persoenlich aber recht unuebersichtlich, vermutlich durch fehlende formatierung

    root_path geht nicht das returniert nur das erste root path und nicht die gesammte struktur,
    mit branch patch gehts aber, hatte damit schon gute ergebnisse gehabt, hatte mich nur gestoert das man da ein umweg gehen muss um ein std::string zu erhalten und noch das \\ anhaengen muss
    daher dachte ich gibt es evtl ein direkteren weg

    boost::filesystem::tpath TheFile(_T("C:\\Temp\\File.txt"));
    std::tstring strFile = boost::filesystem::basename(TheFile);
    std::tstring strExtension = boost::filesystem::extension(TheFile);
    std::tstring strPath = TheFile.branch_path().file_string() + _T("\\");
    

Anmelden zum Antworten