Verzeichnis auflisten

Und was du ändern sollst, baigox, siehst du auch in baddays Posting. Die Funktion wird rekursiv wieder aufgerufen, wenn ein Verzeichnis gefunden wurde, das ist eigentlich die Hauptüberlegung.
 
Code::Blocks ist kein Compiler! Und ja, es gibt Unterschiede. Und eine Software, die nicht weiterentwickelt wird, ist natürlich hinter anderen Compilern, sei es bei Bugs, aber auch bei Features, wie der Unterstützung des kommenden Standards etc., auch die Anpassung an neue Hardware ist ein Punkt.

Gruß,

badday
 
hm nagut ;) So gesehen kann man seinen Code aber auch "optimieren" nach dem Motto "wenns sogar unter Dev-cpp läuft...", da er ja tendenziell weniger unterstützt. :)

[sry, hatte mein Post schon gelöscht, ist ja irgendwie auch logisch]


mfg kickerxy

#edit: Dass Code::Blocks eine IDE ist, ist mir auch bewusst. Das habe ich eben vielleicht verwechselt.
 
@baigox: Konnte dir geholfen werden?

@kickerxy123: OK, sry, hatte noch nicht aktualisiert.

Gruß,

badday
 
Dann poste doch mal die Lösung, vielleicht findet sie jemand anderes auch gut. Oder vielleicht ist ein Fehler drin, den du nicht realisiert hast.
 
also
ich hab zwar keinen Unterordner dürchsucht aber:

erst erstellt das programm eine Datei, in der alles drinnsteht.
dann filter es die ersten 7 Einträge raus diese wären:
Code:
..
.
-start.cmd
-data.txt
-dateien.txt
-unbenannt1.exe
-locator.exe
das - ,weil es nur die ersten 7 Einträge löscht, das - rückt diese Dateien an die ersten Stellen.
-unbenannt1.exe weil mann noch ein belibiges programm hinzufügen kann, welches vielleicht den Inhalt des Ordners benötigt.


Dateierklärung:

-start.cmd
Code:
@echo off
START -locator.exe
Sart -unbenannt1.exe

-data.txt
Code:
Anzahl der Dateien im Ordner

-dateien.txt
Code:
Liste der Dateien im Ordner

-unbenannt1.exe
Code:
diese Datei kann belibig gefüllt werden

-locator.exe
Code:
#include <dirent.h>
#include<windows.h>
#include<fstream>
#include<stdio.h>
#include<iostream>
#include<iomanip>
using namespace std;
void filter(){
     int anzahl;
    fstream f;
    f.open("-data.txt",ios::in);
    f >> anzahl;
    f.close();
    char data[anzahl][50];
    fstream g;
    g.open("-dateien.txt");
    for(int b=0;b<anzahl;b++){
    g >> data [b];
    }
    g.close();
    DeleteFile("-dateien.txt");
    for(int a=0;a<=50;a++){
    for(int b=0;b<=5;b++){
    data[b][a]=(NULL);
}}
    for(int b=0;b<=anzahl;b++){
    printf("%s\n",data[b]);
    fstream a;
    a.open("-dateien.txt",ios::out|ios::app);
    a << data[b] << endl;
    a.close();
    
}
fstream c;
c.open("-data.txt",ios::out);
c << anzahl-7;
c.close();
printf("\n");
     };
int zahler;
DIR *hdir;
struct dirent *entry;
int main(){
DeleteFile("-dateien.txt");
fstream f;
hdir = opendir(".");
do
{
    entry = readdir(hdir);
    if (entry)
    {
        cout << entry->d_name << endl;
        f.open("-dateien.txt",ios::out|ios::app);
        f << entry->d_name << endl;
        f.close();
        zahler++;
    } 
} while (entry);
closedir(hdir);
cout << endl;
fstream g;
DeleteFile("-data.txt");
g.open("-data.txt",ios::out);
g << zahler;
g.close();
filter();
}

ACHTUNG!:ALLE DATEIEN DIE MIT "-" ANFANGEN KÖNNTEN DAS PROGRAMM STÖREN!
(wie macht man diesen c++ code im forum?)
Verbesserungen erwünscht.
 
Hi.

@baigox: Du schreibst zeilenweise Strings in die Datei (die eine unterschiedliche Länge haben) und liest Blöcke von 50 Bytes aus. Das passt irgendwie nicht zusammen.

Außerdem ist es unsinnig die Datei ständig zu öffnen und zu schließen, die DeleteFile Aufrufe kannst du dir auch sparen. Weiterhin überprüfst du nicht ob die Datei(en) überhaupt geöffnet werden konnten.

Warum schreibst du denn überhaupt die ersten 7 Einträge in die Datei rein, nur um sie dann nachher wieder zu entfernen? Es ist übrigens nirgendwo festgelegt in welcher Reihenfolge die Einträge von der opendir Funktion geliefert werden, die ersten Einträge müssen also nicht immer die sein welche du filtern möchtest.

Und du solltest deinen Code ordentlich einrücken und globale Variablen vermeiden.
C++:
#include <iostream>
#include <fstream>
#include <dirent.h>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    ofstream f("-dateien.txt");

    if (f.is_open()) {
        DIR *hdir = opendir(".");

        if (hdir != NULL) {
            struct dirent *entry;

            while (entry = readdir(hdir)) {
                cout << entry->d_name << endl;

                string filename(entry->d_name);

                if (filename != "-datei.txt" &&
                    filename != "-start.cmd" &&
                    filename != "-dateien.txt" &&
                    ...)
                {
                    f << entry->d_name << endl;
                }
                zahler++;
            }

            closedir(hdir);

            cout << endl;
            ofstream g("-data.txt");

            if (g.is_open()) {
                g << zahler;
            } else {
                cerr << "Fehler: konnte Datei -data.txt nicht oeffnen" << endl;
            }
        } else {
            cerr << "Fehler: konnte Verzeichnis nicht lesen" << endl;
        }
    } else {
        cerr << "Fehler: konnte Datei -dateien.txt nicht oeffnen" << endl;
    }
}
Gruß
 
Zurück