aadnk Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Nja, den er unødvendig ineffektiv. Dersom du ser på beskrivelsen av GetFiles (i Object Browser, blant annet), ser du at den returnerer en strengarray. En kan finne antall elementer i en array ved å bruke Length-egenskapen: Dim Files() As String = System.IO.Directory.GetFiles(My.Settings.PSP_DriveLetter)Dim Count As Integer = Files.Length Lenke til kommentar
ze5400 Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Men om count starter på null, og skal opp til Files.Lenght blir det jo feil å sette den til Files.Lenght med mindre man vil telle baklengs. Lenke til kommentar
AnaXyd Skrevet 14. juli 2007 Forfatter Del Skrevet 14. juli 2007 (endret) For den teller bare til 1 på denne her.. Det må være noe jeg mangler da? Dim Folders() As String = System.IO.Directory.GetDirectories(My.Settings.PSP_DriveLetter) Dim Files() As String = System.IO.Directory.GetFiles(My.Settings.PSP_DriveLetter) Dim count As Integer = Files.Length For Each File As String In Files count = +1 Next MessageBox.Show(CStr(count)) EDIT: Dæven, når jeg byttet fra "count = +1" til count += 1, så funket det ja! Hva er forskjellen på de to egentlig? Endret 14. juli 2007 av AnaXyd Lenke til kommentar
aadnk Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Men om count starter på null, og skal opp til Files.Lenght blir det jo feil å sette den til Files.Lenght med mindre man vil telle baklengs. 9073366[/snapback] Jo, men koden hans utførte ikke kopieringen i itereringen. Slik jeg forstod det, forsøkte han å telle antall elementer i strengarrayen ved å bruke ForEach til å gå gjennom alle elementer og øke en teller. Dersom man ønsker å bruke dette sammen med en ProgressBar, må man nok sette Maximum til Files.Lenght og kalle Increment(1) for hver fil man sletter. Lenke til kommentar
aadnk Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 (endret) For den teller bare til 1 på denne her.. Det må være noe jeg mangler da? 9073389[/snapback] Fjern ForEach-løkken! Dessuten måtte du ha skrevet Count = Count + 1 eller Count += 1 for å få løkken til å fungere (da uten Files.Lenght). Endret 14. juli 2007 av aadnk Lenke til kommentar
ze5400 Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Aaah, såklart aadnk Bare jeg som er litt fjern idag Lenke til kommentar
Degeim Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 (endret) Files.Count er litt enklere EDIT: Oi, beklager. Jeg merket meg ikke at posten var gått over til (utrolige) side 6, og svarte på siste innlegget på side 5. Aadnk: Korrekt. Jeg pleier bruke List(of String), så jeg reflekterte ikke over det. .Length er riktig, naturligvis. Endret 14. juli 2007 av Degeim Lenke til kommentar
aadnk Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Files.Count er litt enklere 9073408[/snapback] Det fungerer ikke for strengarrayer, derimot: 'Count' is not a member of 'System.Array'. Lenke til kommentar
aadnk Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Hva er forskjellen på de to egentlig? 9073389[/snapback] Forskjellen er som i matematikken: -1 er ikke det samme som X - 1. Lenke til kommentar
AnaXyd Skrevet 14. juli 2007 Forfatter Del Skrevet 14. juli 2007 Aah.. Riktig... Denne her fungerer(tror jeg) Dim Folders() As String = System.IO.Directory.GetDirectories(My.Settings.PSP_DriveLetter) Dim Files() As String = System.IO.Directory.GetFiles(My.Settings.PSP_DriveLetter) Dim count As Integer = Files.Length count += 1 MessageBox.Show(CStr(count)) Men uansett, når det er fire ting i den mappen, så blir det fem! Dette må vel ha noe med å gjøre at det ligger en skjult fil i mappen? Ligger jo alltid en skjult .ini fil i hver mappe.. Så den teller vel med den også? Lenke til kommentar
ze5400 Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 (endret) Hvorfor count += 1 her? Da blir det jo "Out of range". En ting til. Istedenfor CStr(count) kan du bruke count.ToString() Objektorientert FTW. Og om vi skal tro denne artiklen lønner det seg ytelsesmessig. http://blog.nicholasduffy.com/2007/06/cstr...ostring-vs.html Endret 14. juli 2007 av ze5400 Lenke til kommentar
AnaXyd Skrevet 14. juli 2007 Forfatter Del Skrevet 14. juli 2007 Hvorfor count += 1 her? 9073444[/snapback] Hvorfor? Det er jo den som teller filene og mappene? Lenke til kommentar
ze5400 Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Hahaha, ikke nå lengre Dim count As Integer = Files.Length Den teller filene. count += 1 teller ikkenoe utenfor en loop Lenke til kommentar
aadnk Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Hvorfor? Det er jo den som teller filene og mappene? 9073449[/snapback] Nei, det er det Dim count As Integer = Files.Length som gjør. Fjern Count += 1 fra koden, og det vil fungere. Lenke til kommentar
AnaXyd Skrevet 14. juli 2007 Forfatter Del Skrevet 14. juli 2007 Aaah! Da skjønner jeg litt mer ja! Her er den fungerende koden: Dim Folders() As String = System.IO.Directory.GetDirectories(My.Settings.PSP_DriveLetter) Dim Files() As String = System.IO.Directory.GetFiles(My.Settings.PSP_DriveLetter) Dim count As Integer = Files.Length ProgressBar1.Maximum = Files.Length ProgressBar1.Value = count MessageBox.Show(count.ToString()) Og det fungerer jaggu meg også! Hehe *litt stolt* Takk! Men hvordan skal jeg slå isammen de to kodene nå da? Lenke til kommentar
ze5400 Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Nå har jeg lagd en liten "hjemmelekse" til deg. Her har du koden som teller filene, og tar seg av progressbaren. Legg til kode som tar seg av slettinga, og kommenter hver linje funksjonen. Så legger du det opp. Da lærer du nok en del Dim Folders() As String = Directory.GetDirectories("C:\") Dim Files() As String = Directory.GetFiles("C:\") pgbProgress.Maximum = (Files.Length + Folders.Length) For Each Folder As String In Folders pgbProgress.Value += 1 Next For Each File As String In Files pgbProgress.Value += 1 Next Lenke til kommentar
Degeim Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Men det der vil da vel ikke fungere? Slette mappene først, og så filene etterpå (prøv selv -- lag deg en mappe med noen filer i, slett mappen, og forsøk så å slette filene i mappen etterpå...)? Jeg tror du bør bytte rekkefølgen. Lenke til kommentar
ze5400 Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 (endret) Niks. Rota inneholder mapper. Først sletter den mappene på rota. Deretter filene på rota. You follow me ? Er slett ikke nøye hvilke rekkefølge sånn sett Endret 14. juli 2007 av ze5400 Lenke til kommentar
Degeim Skrevet 14. juli 2007 Del Skrevet 14. juli 2007 Beklager. Nok en gang min feil. Jeg la ikke merke til at du ikke tok med undermapper i søket etter mappene og filene. Lenke til kommentar
AnaXyd Skrevet 14. juli 2007 Forfatter Del Skrevet 14. juli 2007 Her er den: Dim Folders() As String = System.IO.Directory.GetDirectories(My.Settings.PSP_DriveLetter) ' Setter variablen Folders() til den riktige banen Dim Files() As String = System.IO.Directory.GetFiles(My.Settings.PSP_DriveLetter) ' Setter variablen Files() til den riktige banen pgbProgress.Maximum = (Files.Length + Folders.Length) ' Finner ut maximumsverdien på progressbaren, ved å sjekke hvor mange filer og mapper det er..(?) For Each Folder As String In Folders System.IO.Directory.Delete(Folder, True) ' Sletter mappene, og filer i mappene pgbProgress.Value += 1 ' Legger til verdi på progressbaren Next For Each File As String In Files System.IO.File.Delete(File) ' Sletter filer pgbProgress.Value += 1 ' Legger til verdi på progressbaren Next Er hjemmeleksa godkjent? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå