Liste mit Pfaden erstellen



  • Hi, ich möchte eine Liste mit (vielen 😉 ) Pfadeinträgen erstellen. bisher sieht es so aus:

    [cpp]
    
    #include <dir.h>
    #include <direct.h>
    
    #define MAX_MOVIES      17771 
    
    char m_cCurrentPath[_MAX_PATH];
    char m_cDatasetPath[];
    char** m_ppcDatasetFilelist;
    
    //generate file structure
    getcwd(m_cCurrentPath, _MAX_PATH);	
    sprintf(m_cDatasetPath, "%s\\..\\data", m_cCurrentPath);
    
    std::cout << "Current path is " << m_cCurrentPath << std::endl;	
    std::cout << "Data path is " << m_cDatasetPath << std::endl;
    
    m_ppcDatasetFilelist = new char*[MAX_MOVIES];
    for (int k = 0; k < MAX_MOVIES; k++){
    	m_ppcDatasetFilelist[k] = new char[_MAX_PATH];
    	sprintf(m_ppcDatasetFilelist[k],"%s\\SomeFileID%i", m_cDatasetPath, k);
    	std::cout << m_ppcDatasetFilelist[k] << std::endl;
    }
    
    [/cpp]
    

    letztenendes soll m_ppcDatasetFilelist den vollständigen Pfad für die ganzen Dateien enthalten. Problem ist, dass m_ppcDatasetFilelist eben ein Pointer-Array ist und beim ausgeben nur der erste Buchstabe erscheint... Ich brauch aber den ganzen Pfad 🙂

    Hilfe wär fett!

    ANGs_Pino



  • Warum benutzt du kein C++? Ich meine, das schlimme rumge-chare ist ja nicht gerade einfach zu handhaben, nutz doch einfach std::string.



  • wie krieg ich das mit std::string hin, dass ich eine liste von strings bekomme, die pfade + dateiname enthält, also

    c:\folder1\folder2\file1.txt
    c:\folder1\folder2\file2.txt
    c:\folder1\folder2\file3.txt
    c:\folder1\folder2\file4.txt

    etc. (Habe nochkeinen Plan von Strings).

    Wichtig ist, dass ich später mit den dateipfaden/dateiname textfiles öffnen kann

    fid = fopen(FILENAMEARRAY[1]);

    ANGs_Pino



  • #include <string>
    #include <vector>
    ...
    
    std::vector<std::string> paths;
    paths.push_back ( "c:\folder1\folder2\file1.txt" );
    paths.push_back ( "c:\folder1\folder2\file2.txt" );
    ...
    

    http://www.cplusplus.com/reference/string/



  • std::liststd::string deinestrings;

    und zum Öffnen von den dingern würde ich dir eher ifstream(beim lesen) empfehlen.
    Kannst dich ja mal hier umschauen:
    http://www.cplusplus.com/reference/string/
    http://www.cplusplus.com/reference/iostream/ifstream/



  • drakon schrieb:

    [cpp]
    std::vectorstd::string > paths;

    http://www.cplusplus.com/reference/string/

    Haste da nich ein > zuviel?



  • Firefighter schrieb:

    drakon schrieb:

    [cpp]
    std::vectorstd::string > paths;

    http://www.cplusplus.com/reference/string/

    Haste da nich ein > zuviel?

    Habs editiert. War mit den Gedanken wo anderst. 🙂



  • .. verwende C++, dann hast Du das Problem eher nicht.

    #include <dir.h>
    #include <direct.h>
    #include <string>
    #include <vector>
    #include <sstream> // ostringstream
    
    #define MAX_MOVIES      17771
    
    char m_cCurrentPath[_MAX_PATH];
    std::string m_cDatasetPath;
    std::vector< std::string > m_DatasetFilelist;
    const std::string ADD_PATH = "\\..\\data";
    
    //generate file structure
    getcwd(m_cCurrentPath, _MAX_PATH);
    m_cDatasetPath = m_cCurrentPath + ADD_PATH;
    
    std::cout << "Current path is " << m_cCurrentPath << std::endl;   
    std::cout << "Data path is " << m_cDatasetPath << std::endl;
    
    for (int k = 0; k < MAX_MOVIES; k++){
        std::ostringstream buf;
        buf << m_cDatasetPath << "\\SomeFileID" << k;
        m_DatasetFilelist.push_back( buf.str() );
        std::cout << m_DatasetFilelist.back() << std::endl;
    }
    

    .. und sparst noch einen Haufen Arbeit im Destruktor.

    Gruß Werner



  • drakon schrieb:

    #include <string>
    #include <vector>
    ...
    
    std::vector<std::string> > paths;
    paths.push_back ( "c:\folder1\folder2\file1.txt" );
    paths.push_back ( "c:\folder1\folder2\file2.txt" );
    ...
    

    http://www.cplusplus.com/reference/string/

    wenn die pfade automatisch erstellt werden sollen, "c:\folder1\folder2\file1" ist konstant, dann soll filgen 0000001 bis 0123445 (aufsteigend durchnummeriert. Wie krieg ich das rein?

    so?

    [cpp]
    
    #include <string>
    #include <vector>
    ...
    
    std::vector<std::string> > paths;
    
    string str1 = "c:\folder1\folder2\file1" ;
    string str2;
    
    for (i = 0; i < 123445; i++){
    
         str2 << i;
         paths.push_back ( "c:\folder1\folder2\file" + str2 + ".txt"  );
    
    }
    
    [/cpp]
    

    nur... wie krieg ich die "führenden nullen rein", dass die filenames immer genau gleich lang sind also 0000001 aber 0100000...



  • ANGs_Pino schrieb:

    nur... wie krieg ich die "führenden nullen rein", dass die filenames immer genau gleich lang sind also 0000001 aber 0100000...

    so:

    for (int k = 0; k < MAX_MOVIES; k++){
        std::ostringstream buf;
        buf.fill('0');
        buf << m_cDatasetPath << "\\SomeFileID" << std::setw(7) << k;
        m_DatasetFilelist.push_back( buf.str() );
        std::cout << m_DatasetFilelist.back() << std::endl;
    }
    

    erfordert noch #include <iomanip>

    Gruß Werner


Anmelden zum Antworten