Gå til innhold

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


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet

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.

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

Endret av AnaXyd
Skrevet
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.

Skrevet (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 av aadnk
Skrevet (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 av Degeim
Skrevet
Files.Count er litt enklere ;)

9073408[/snapback]

Det fungerer ikke for strengarrayer, derimot:

'Count' is not a member of 'System.Array'.

Skrevet

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å?

Skrevet
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.
Skrevet

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?

Skrevet

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

Skrevet

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.

Skrevet (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 av ze5400
Skrevet

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

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...