Avatar billede jonlanghoff Nybegynder
28. juli 2006 - 13:40 Der er 13 kommentarer og
1 løsning

Find det komplette filnavn

Hej alle

Jeg vil lave en metode der udfra begyndelsen på navnet på en mappe, kan finde frem til mappen og derved det komplette navn.

Der skal altså itereres gennem en en mappe med en masse underliggende mapper.

Brugeren indtaster begyndelsen af navnet i en tekstbox, og så skal programmet finde det komplette navn og returnere det.

På forhånd tak
Jon
Avatar billede segato Nybegynder
28. juli 2006 - 15:06 #1
System.IO.Directory d = System.IO.Directory.GetDirectories("din sti her", "søgepattern");
Avatar billede innercitydk Nybegynder
28. juli 2006 - 15:11 #2
Jeg har lige bikset lidt kode sammen:

Jeg har lavet en form med en kombobox til at vælge drev [cb_drev], en textbox til at vælge karakterer at sammenligne med [tb_ind] og en listbox til resultaterne [listBox1].

Først indsættes følgende variabler som globale variabler der er tilgængelige for alle medlemmer af klassen.

private string trigger;
private int count;

trigger bruges til tekstboksens indhold.
count er længden af chars den skal sammenligne med, altså det antal karakterer der er indtaster i tekstboksen (hvis intet indtastes listet alle dirs).

I form1.load listes drevene i cb_drev og det første drev markeres:

string[] drives = System.IO.Directory.GetLogicalDrives();
foreach (string drive in drives)
{
    cb_drev.Items.Add(drive);
}
cb_drev.SelectedIndex = 0;


Ved button1_click udføres følgende kode:

listBox1.Items.Clear();
trigger = tb_ind.Text;
count = trigger.Length;
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(cb_drev.SelectedItem.ToString());
test(dir, trigger);

Listboksen cleares først for at gøre plads til nye resultater. Derefter sættes trigger til tekstboksens tekst og count initieres. Herefter initieres der en instans af System.IO.DirectoryInfo, som skal bruges til at gennemløbe mapperne på drevet. Til sidst køres følgende metode:

private void test(System.IO.DirectoryInfo dir, string ind)
{
string tmp = "";
try
{
foreach (System.IO.DirectoryInfo g in dir.GetDirectories())
{
tmp = g.FullName;
if (ind.Length != 0)
{
try
{
if (tmp.ToLower().Substring(3, count) == ind.ToLower())
listBox1.Items.Add(g.FullName);
}
catch
{
continue;
}
}
else
{
listBox1.Items.Add(g.FullName);
}
}
}
catch
{
MessageBox.Show("Der kan ikke læses fra drevet!");
}
}

Du kan hente en kopi af hele vs2005 projektet herunder:

http://aspdotnet.dk/ExpTilTest.zip

Vh Nicki
Avatar billede segato Nybegynder
28. juli 2006 - 17:47 #3
Er det ikke nemmere at angive et søge pattern i stedet for at søge alt igennem? Hvorfor kode noget der er kodet?
Avatar billede innercitydk Nybegynder
28. juli 2006 - 19:32 #4
Vent og se hvad spørger svarer.. Han efterspurgte en metode, og engang imellem er det da sjovere at kode lidt istedet for altid bare at bruge noget der er lavet!
Avatar billede segato Nybegynder
28. juli 2006 - 19:37 #5
Ja det jo selvfølgelig helt op til den enkelte udvikler. Personligt vil jeg hellere anvende funktionalitet der allerede findes i .NET end at kode det selv. Men sådan er vi jo så forskellige.
Avatar billede segato Nybegynder
28. juli 2006 - 19:46 #6
Jeg smider også lige et lille eksempel. Det her eksempel returnere alle foldere der starter med te, så i mit tilfælde temp folder:

string[] s = System.IO.Directory.GetDirectories("c:\\", "Te*");
Avatar billede segato Nybegynder
28. juli 2006 - 19:48 #7
Plus du kan smide en parameter på der bestemmer om det skal være recursivt. string[] s = System.IO.Directory.GetDirectories("c:\\", "Te*",System.IO.SearchOption.AllDirectories);
Avatar billede segato Nybegynder
28. juli 2006 - 19:48 #8
Så du har hele din løsning i en linie kode :D
Avatar billede jonlanghoff Nybegynder
29. juli 2006 - 10:29 #9
Tak begge to. I er søde. Smid et svar, segato.
Avatar billede innercitydk Nybegynder
29. juli 2006 - 11:25 #10
Her er 30 point til dig Segato:

http://www.eksperten.dk/spm/722956

Vh
Avatar billede segato Nybegynder
29. juli 2006 - 15:40 #11
Takker håber det løste dit problem.
Avatar billede segato Nybegynder
29. juli 2006 - 15:41 #12
Kan ikke smide et svar da du har givet points. Men er ikke samler alligevel så det går nok :D
Avatar billede innercitydk Nybegynder
29. juli 2006 - 20:38 #13
Segato læs den her tråd :)

29/07-2006 11:25:52

http://www.eksperten.dk/spm/722956
Avatar billede segato Nybegynder
29. juli 2006 - 23:18 #14
ok super.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester