Ordnerstrucktur auslessen



  • Hi ich will eine Ordnerstruktur samt Unterordner auslesen und sie dann in ein Tree View speichern. Ich weiß wie ich die Daten aus einem Ordner raus bekomme aber nicht wie ich auch die Unteroder bekomme. Kann mir jemand helfen?

    Viele Dank im Voraus



  • Hallo

    Rekursion über die Unterordner.
    Genaueres können wir erst sagen, wenn du uns sagts wie du Ordnerdaten auslesen.

    bis bald
    akari



  • also ich benutze FindFirst... hab mich hierbei an die Hilfe von Borland gehalten.

    TSearchRec sr;
    	 int iAttributes = 0;
    	 iAttributes |= faReadOnly * CheckBox1->Checked;
    	 iAttributes |= faHidden * CheckBox2->Checked;
    	 iAttributes |= faSysFile * CheckBox3->Checked;
    	 iAttributes |= faVolumeID * CheckBox4->Checked;
    	 iAttributes |= faDirectory * CheckBox5->Checked;
    	 iAttributes |= faArchive * CheckBox6->Checked;
    	 iAttributes |= faAnyFile * CheckBox7->Checked;
    	 if (FindFirst(path, iAttributes, sr) == 0)
    	  {
    		do
    		{
    		  if ((sr.Attr & iAttributes) == sr.Attr)
    		  {
    				if(wo == 1){
    					if(sr.Name != ".." && sr.Name != "."){
    					TreeView1->Items->Add(0,Text+sr.Name);
    					}
    				}		
    		  }
    		} while (FindNext(sr) == 0);
    		FindClose(sr);
    	  }
    


  • Hallo

    mit dieser Methode wirst du feststellen, das in der Ergebnismenge auch die Namen der Unterverzeichnisse enthalten sind. Welche das sind, kannst du über die Eigenschaft TSearchRec::Attr herausfinden.
    Also must du nur für alle gefundenen Unterordner die Suche neu starten, indem du den Namen des Unterordners an die Variable path anfängst.
    Es ist also erstmal sinnvoll, den Code in eine Methode auszulagern, die als Parameter den kompletten Pfad entgegennimmt.

    bis bald
    akari



  • jo hab das schon mal ausbrobiert aber ich habe nie ne ausgebe bekommen.
    blos mit StringGrid1 aber das ist ja egal er mal wo = 2 soll die Dateien auslessen was erstmal egal ist

    void __fastcall TForm1::Ordner(AnsiString path,int wo){
      if(wo == 1){
    	StringGrid1->RowCount = 0;
    		 CheckBox6->Checked = false;
    		 CheckBox7->Checked = false ;
      }else{
    	if(wo == 2){
    		StringGrid2->RowCount = 0;
    		CheckBox6->Checked = true;
    		CheckBox7->Checked = true ;
    	}
      }
      if(wo <=2 && wo > 0){
    	 AnsiString Text = path;
    	 Text.SetLength(Text.Length()-3);
    	 TSearchRec sr;
    	 int iAttributes = 0;
    	 iAttributes |= faReadOnly * CheckBox1->Checked;
    	 iAttributes |= faHidden * CheckBox2->Checked;
    	 iAttributes |= faSysFile * CheckBox3->Checked;
    	 iAttributes |= faVolumeID * CheckBox4->Checked;
    	 iAttributes |= faDirectory * CheckBox5->Checked;
    	 iAttributes |= faArchive * CheckBox6->Checked;
    	 iAttributes |= faAnyFile * CheckBox7->Checked;
    	 if (FindFirst(path, iAttributes, sr) == 0)
    	  {
    		do
    		{
    		  if ((sr.Attr & iAttributes) == sr.Attr)
    		  {
    				if(wo == 1){
    					if(sr.Name != ".." && sr.Name != "."){
    					StringGrid1->RowCount = StringGrid1->RowCount + 1;
    					StringGrid1->Cells[0][StringGrid1->RowCount-1] = Text+sr.Name;
    					Ordner(Text+sr.Name+"\\*.*",1);
                        }
    				}else{
    					if(sr.Name != ".." && sr.Name != "."){
    					AnsiString Test;
    					int Test2 = sr.Name.Length()-3;
    					Test=sr.Name.SubString(Test2,1);
    					if(Test == "."){
    					Label2->Caption = Test;
    						 StringGrid2->RowCount = StringGrid2->RowCount + 1;
    						 StringGrid2->Cells[0][StringGrid2->RowCount-1] = Text+sr.Name;
    					}
                        }
    				}
    		  }
    		} while (FindNext(sr) == 0);
    		FindClose(sr);
    	  }
      }
    }
    

Log in to reply