struct of c:\

excSchaKaL

Grünschnabel
Hallo

Ich hab ein kleines Programm geschrieben was mir die Ordnerstructur von c ausgeben soll.
Jetzt ist es aber so das er mir nur normale Ordner als Ordner anzeigt.
Sowie ich einen Ordner Schreibgeschützt oder Versteckt mache zeigt er mir das als Datei an.
Wäre nett wenn mir da wer helfen kann ich komm nimma weita.
thx im Voraus.

hier ma der Quellcode

Code:
	WIN32_FIND_DATA FileData; 
          
	HANDLE hfind = FindFirstFile("c:\\*.*",&FileData); 

	int FindMoreFiles; 
	int dir = 0;
	int file  = 0;

	do
	{ 
		if (FileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
		{       
			cout<< "<Ordner> " << FileData.cFileName << endl;         
			dir++; 
		}
    
		else 
		{
			cout << "<Datei>  " << FileData.cFileName << endl; 
			file++; 
		}         
      
		FindMoreFiles = FindNextFile(hfind,&FileData); 

	} while (FindMoreFiles); 
        
	FindClose(hfind);   
    
	cout << endl << "Insgesamt" << endl;
	cout << "Ordner:  "<< dir << endl;
	cout << "Dateien: "<< file << endl << endl;

Ich hatte es schon soweit das er mir die Ordner anzeigt die Versteckt sind aber mehr pack ich nich :(
das sah so aus
Code:
		if (FileData.dwFileAttributes == (0x000010|0x000001)!=0)
 
Eine etwas langsamere Variante würde Dein Problem vorerst beseitigen:
Du schaust zusätzlich zu den schon gefundenen Verzeichnissen einfach mal nach ob in die "Dateien" wie in ein Verzeichnis gewechselt werden kann.

Ich glaube chdir(const char*); war der entsprechende Befehl dafür.
 
Weißt du, was Flags sind und was im Gegensatz dazu ein Status ist?
Wenn Flags in gesetzt sind, benutz nicht den == operator, sondern &
 
Beichtpfarrer hat gesagt.:
Weißt du, was Flags sind und was im Gegensatz dazu ein Status ist?
Wenn Flags in gesetzt sind, benutz nicht den == operator, sondern &

Ja eigentlich weiß ich schon was Flags sind.
an der Stelle war nen denkfehler von mir.

Ich bin auch nich so der c Profi das ich das alles aus dem Stehgreif schreiben kann wie einige hier :)


@ Thomas Kuse danke für deine Lösung aber so richtig gefällt sie mir nich :)
für mein kleinkram schön und gut aber für größere sachen ist das doof.
 
huhu
Ich hätte da noch ne kleine Frage
wie müsste ich das Programm umschreiben wenn ich die ganze Laufwerkstruktur sehen will?
also auch unterordner und so.

kann mir da wer helfen?
 
So: du schreibst einfach ne Funktion, die übernimmt das Durchsuchen jeweils eines Ordners.
Rufst du sie für den gewollten Startordner auf.
Wenn sie en Ordner findet, ruft sie sich einfach selbst nochmal für diesen Ordner auf.
 
Code:
void listFiles (char *pDirectory);
{

	char Buffer[_MAX_PATH];
	strcpy (Buffer, pDirectory);
	strcat (Buffer, "*.*");

	while (hfind)
	{
		if (pDirectory)
			listFiles("c:\",pDirectory);
	}
}
So hab ich's aber Funktioniert irgendwie nicht so recht.
 
Zuletzt bearbeitet:
In etwa so (ungetestet):

Code:
void ListFiles(string Directory){
	if(Directory[Directory.size()-1]!='\\')
		Directory += "\\";
	Directory += "*";

	WIN32_FIND_DATA fdat;
	HANDLE hSearch;

	if((hSearch=FindFirstFile(Directory.c_str(),&fdat))!=INVALID_HANDLE_VALUE){
		do{
			if(strcmp(fdat.cFileName,".")&&strcmp(fdat.cFileName,"..")){

				if(fdat.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
					ListFiles(Directory+fdat.cFileName);

			}

		}while(FindNextFile(hSearch,&fdat));
	}
}
 
Zurück