webForumDet fria alternativet

Katalog struktur.

.NET

8 svar · 380 visningar · startad av jazzil

Medlem sedan maj 2003151 inlägg
Frågan#1

Tjena killar o tjejer.
Jag sitter här med ett problem som jag känner att jag inte är riktigt berädd att attakera praktiskt änu.

Frågan är hur sparar jag en oändlig katalog struktur i en fler dimensions array?

typ

root är
array[0]
fösta under mappen i root är array[0][0]
och osv.

Hur hur ska jag sen loopa ut allt på ett bra sätt...

Inga full lösningar kräves utan bara tips.

Tack!

Medlem sedan juni 20019 024 inlägg
#2

I stället för att utöka din dimension på din array bör du utöka indexet. Förslagsvis kan du skapa en egen class som du placerar i en arraylist.

Exepelvis (pseudokod):

arraylist.Add(New CatalogItem("root/"))
arraylist.Add(New CatalogItem("subkatalog/"))
arraylist.Add(New CatalogItem("subkatalog2/"))
Medlem sedan apr. 20012 266 inlägg
#3

Rekursiva funktioner brukar vara hjälpsamma i dessa lägen, dock vet jag inte om en flerdimensions array är bästa lösningen, arbetade förut med en form av katalogsystem där vi i stället för att använda en array använde två object, själva objektet innehållandes information, namn, beskrivning, etc; samt en collection. Såg ut ungefär så här:

class Katalog
{
   public string Name;
   public string Beskrivning;
   public KatalogCollection Kataloger;

   public Katalog(string path)
   {
      // hämta underkataloger
      Kataloger = new KatalogCollection(path);
   }
}

class KatalogCollection : CollectionBase
{
   // ...

   public KatalogCollection(string path)
   {
       // iterera genom katalogerna som finns tillgängliga och lägg till i Collection
       foreach(string catpath in GetCatalogs())
          List.Add(new Katalog(catpath);
       
   }
}

Används sedan enligt förljande:

Katalog root = new Katalog("c:\\");
string first = root.Kataloger[0].Namn; // första katalogen.
Medlem sedan maj 2003151 inlägg
#4

Tack!
Ska kolla på det återkommer om det blir problem.

Medlem sedan maj 2003151 inlägg
#5

Jag fick problem :)

foreach(string catpath in GetCatalogs())
List.Add(new Katalog(catpath));
Fel: The name 'GetCatalogs' does not exist in the class or namespace 'ASPXGalleri.KatalogCollection'

Medlem sedan apr. 20012 266 inlägg
#6

He, GetCatalogs var bara för att illustrera att det skulle vara en funktion för att hämta kataloger där. Om du vill ha en som fungerar så kika i System.IO namnutrymmet.

Medlem sedan maj 2003151 inlägg
#7

Jadu ... det var svårare än jag trodde..

Katalog root = new Katalog(Server.MapPath(ImageFolder));
error.Text = root.Kataloger[0].Namn;

Fel: Cannot apply indexing with [] to an expression of type 'ASPXGalleri.KatalogCollection'

	public class Katalog
	{
		public string Name;
		public string Beskrivning;
		public KatalogCollection Kataloger;

		public Katalog(string path)
		{
			Kataloger = new KatalogCollection(path);
		}
	}
	
	public class KatalogCollection : CollectionBase
	{
		public KatalogCollection(string path)
		{
			foreach(string catpath in Directory.GetDirectories(path))
				List.Add(new Katalog(catpath));       
		}
	}
Medlem sedan apr. 20012 266 inlägg
#8

I KatalogCollection saknas en del för att kunna använda den fullt ut.

public Katalog this[int Index]
{
   get { return (Katalog)List[Index]; }
   set { List[Index] = value; }
}
Medlem sedan maj 2003151 inlägg
#9

Tack!

256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)