absoluten datei-pfad sortiert auslesen



  • Hallo,

    Ich wollte den absoluten datei-pfad in einem Ordner sortiert auslesen(unter Linux). Auslesen die datei-pfaden ist ok aber bei der Sortierung habe ich Probleme.

    selectedDirectory = fl_dir_chooser ("Select Imagedirectory:",NULL,0);//Das ist nur ein Widget um den Ordner zu zeigen. 
    
    	DIR *d;
    	dirent *de;
    //  	char pfad[256];
    	numberOfFilesOnSelectedFolder= 0;
    
    	d=opendir(selectedDirectory); //Hier kann man den Ordnerpfad eingeben anstatt selectedDirectory
    
    	while((de=readdir(d))){
    	numberOfFilesOnSelectedFolder++;
    	}
    	closedir(d);
    
    	d= opendir(selectedDirectory);
    
    	std::vector <std::string> result;
    
    	char buffer[500];
    	int n;
    
    	if (d) {
    	while (true) {
    	de= readdir(d);
    
    	if (de == NULL) break;
    	n= sprintf (buffer, "%s/%s", selectedDirectory, de->d_name);
    	result.push_back( std::string(buffer));
          }
    	closedir(d);
    	std::sort( result.begin(), result.end() );
        }
    
    cout << "result 3:" << result.at(0) << endl << result.at(1) << endl << result.at(2) << endl << result.at(3) << endl << result.at(4) << endl << result.at(5) << endl << result.at(6) << endl;
    

    Wenn ich diesen Code ausführe und bestimmen will, was die 0., 1., 2., 3. usw. Dateien im Ordner sind, dann bekomme ich folgende Antwort:

    result 3:/home/csad6517/Desktop/ViSeCut/Neck2/.
    /home/csad6517/Desktop/ViSeCut/Neck2/..
    /home/csad6517/Desktop/ViSeCut/Neck2/Unbenannt-105.dcm
    /home/csad6517/Desktop/ViSeCut/Neck2/Unbenannt-106.dcm
    /home/csad6517/Desktop/ViSeCut/Neck2/Unbenannt-107.dcm
    /home/csad6517/Desktop/ViSeCut/Neck2/Unbenannt-36.dcm
    /home/csad6517/Desktop/ViSeCut/Neck2/Unbenannt-37.dcm

    Die Datei -105.dcm, -106.dcm, -107.dcm liegen aber im Ordner ganz unten und -36.dcm, -37.dcm ganz oben. Das Programm vergleicht 1 und 3 von 105 und 37, da 1 kleiner als 3 ist gibt es als erstes aus, weiss aber nicht dass 105 dreistellig und 37 zweistellig ist. Was kann man da machen, damit die Reichenfolge stimmt?

    Die Dateien im Ordner sehen so aus:
    http://www.wopsys.com/bilder/dateien.jpg

    Danke im Voraus.



  • Ich würde spontan sagen, einfach die -36.dcm zu -036.dcm umschreiben^^

    EDIT:

    Nunja, wenn du die Dateinamen ausließt, kannst du ja vom letzten "/" bis zum "." die String Länge auslesen (oder wenn dich nur die Zahlen hinten interessieren von "-" bis "."). Sollte eine davon kürzer sein, als eine andere wird halt ein Zeichen dort eingefügt.

    mfg



  • anti-freak schrieb:

    Ich würde spontan sagen, einfach die -36.dcm zu -036.dcm umschreiben^^

    Nimm an, dass der Ordner hunderte dateien enthält 🙂
    Das hat dann keinen Sinn.



  • Hab was dazu editiert^^



  • anti-freak schrieb:

    Hab was dazu editiert^^

    könnte das lesen von String-länge auch für die folgende Dateien funktionieren?

    z.B.

    ../Hnovbh_Phantom-01.01.1900-CT-19.10.2007-17_21_00-0.dcm
    ../Hnovbh_Phantom-01.01.1900-CT-19.10.2007-17_21_00-1.dcm
    ../Hnovbh_Phantom-01.01.1900-CT-19.10.2007-17_21_00-2.dcm
    .
    .
    .
    ../Hnovbh_Phantom-01.01.1900-CT-19.10.2007-17_21_00-100.dcm
    ../Hnovbh_Phantom-01.01.1900-CT-19.10.2007-17_21_00-101.dcm

    usw.

    Hier sind die Längen gleich, und mann muss wieder auf die Zahlen schauen 😞 Eine allgemeine Lösung, die für alle Fällen gilt, wäre wirklich perfekt für mich.



  • Was ist denn deine Priorität?
    Nach der "Endung", also deinem gewähltem Dateinamen oder eben nach dem Datum.
    Ich verstehe nicht ganz, auf was das hinauslaufen soll.

    Weil irgendwelche Angaben musst du machen, nach denen du sortieren willst. Wenn du dem PC einfach nur sagst "mach mal" kommt halt das dabei raus, was Windows oder eben dein Betriebssystem eben normalerweise macht.

    EDIT:

    Und ja, es ist möglich zwischen den einzelnen "-" den letztem im String herauszufinden. Dazu gibt es die funktion str.find_last_of("-").

    mfg



  • anti-freak schrieb:

    Was ist denn deine Priorität?
    Nach der "Endung", also deinem gewähltem Dateinamen oder eben nach dem Datum.
    Ich verstehe nicht ganz, auf was das hinauslaufen soll.

    Weil irgendwelche Angaben musst du machen, nach denen du sortieren willst. Wenn du dem PC einfach nur sagst "mach mal" kommt halt das dabei raus, was Windows oder eben dein Betriebssystem eben normalerweise macht.

    EDIT:

    Und ja, es ist möglich zwischen den einzelnen "-" den letztem im String herauszufinden. Dazu gibt es die funktion str.find_last_of("-").

    mfg

    Natürlich interessieren mich nur die Zahlen, die nach dem Zeichen - kommen. Was vor dem Zeichen - kommt ist immer unterschiedlich. Danke für den Link


Log in to reply