Gå til innhold

Hjelp til System.IO.File.Copy..!


Anbefalte innlegg

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
Videoannonse
Annonse

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? :hmm:

Endret av AnaXyd
Lenke til kommentar
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
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 av aadnk
Lenke til kommentar

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 av Degeim
Lenke til kommentar

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

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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...