Avatar billede dollas Nybegynder
20. maj 2004 - 20:27 Der er 21 kommentarer og
1 løsning

filer med mere

Jeg mangler noget kode til at kunne løbe f.eks c: igennem for dirs og filer. Til at starte med skal den bare tælle antal dirs og filer...

Men jeg bliver sindsyg, for jeg havde lige lavet noget der virkede og så døde min disk, så skal jeg straarte igen, og jeg magter det ikke, så hvis der er nogle der hurtig kan give mig noget kode ville jeg blive *-glad...
Avatar billede arne_v Ekspert
20. maj 2004 - 20:30 #1
Følgende løber igennem C:\WINNT og alle under dirs:

using System;
using System.IO;

class MainClass
{
    public static void lookup(String dir)
    {
        string[] files = Directory.GetFiles(dir);
        foreach(string f in files)
        {
            Console.WriteLine(f);
        }
        string[] dirs = Directory.GetDirectories(dir);
        foreach(string d in dirs)
        {
            lookup(d);
        }
    }
    public static void Main(string[] args)
    {
        lookup("C:\\WINNT");
    }
}
Avatar billede dollas Nybegynder
20. maj 2004 - 20:32 #2
Lækkert nok arne_v, men det er jo et vb.net spørgsmål... :)
Avatar billede arne_v Ekspert
20. maj 2004 - 20:32 #3
Den her ligger størrelsen af filerne sammen:

Imports System
Imports System.IO

Module Main
    Sub Main()
        Console.WriteLine(total("C:\WINNT"))
    End Sub
    Function total(dir As String) As Integer
        Dim res As Integer = 0
        Dim i As Integer
        Dim d As DirectoryInfo = new DirectoryInfo(dir)
        Dim allf As FileInfo() = d.GetFiles()
        For i = 0 To allf.Length - 1
            res = res + allf(i).Length
        Next
        Dim alld As DirectoryInfo() = d.GetDirectories()
        For i = 0 To alld.Length - 1
            res = res + total(alld(i).FullName)
        Next
        total = res
    End Function
End Module
Avatar billede arne_v Ekspert
20. maj 2004 - 20:33 #4
.NET kan jo være både C# og VB.NET ...
Avatar billede dollas Nybegynder
20. maj 2004 - 20:34 #5
Yes sir... sorry... Men jeg venter lige med at give pouint, for det kan være at jeg har tillægs spørgsmål... 5 min
Avatar billede arne_v Ekspert
20. maj 2004 - 20:35 #6
Den første udgave i VB.NET:

Imports System
Imports System.IO

Class MainClass

    Public Shared Sub lookup(ByVal dir As String)
        Dim files As String() = Directory.GetFiles(dir)
        For Each f As String In files
            Console.WriteLine(f)
        Next
        Dim dirs As String() = Directory.GetDirectories(dir)
        For Each d As String In dirs
            lookup(d)
        Next
    End Sub

    Public Shared Sub Main(ByVal args As String())
        lookup("C:\WINNT")
    End Sub
End Class
Avatar billede arne_v Ekspert
20. maj 2004 - 20:35 #7
Men et svar anyway
Avatar billede dollas Nybegynder
20. maj 2004 - 20:36 #8
Den føste di lavede i vb.net gav

Additional information: Arithmetic operation resulted in an overflow.

Jeg prøver lige den anden... du for sku lige nogle point
Avatar billede dollas Nybegynder
20. maj 2004 - 20:38 #9
Den virkede... tak...

Hvis jeg så laver en count variabel i

denne

--

For Each f As String In files
            Console.WriteLine(f)
        Next

--

og i den til dirs, så virker den som en counter, right?
Avatar billede dollas Nybegynder
20. maj 2004 - 20:39 #10
Det var sku da et underligt spørgsmål jeg stiller der... Jeg prøver sku da bare...

Tak Arne_v
Avatar billede arne_v Ekspert
20. maj 2004 - 20:41 #11
Hvis du tæller fil størrelse skal du bruge Long til > 4 GB.
Avatar billede dollas Nybegynder
20. maj 2004 - 20:41 #12
Hvad skal jeg define min tælle variabel som? hvis den skal indeholde stien?
Avatar billede dollas Nybegynder
20. maj 2004 - 20:43 #13
okay... Men det er mere antal filer ialt og antal dir's...

Jeg bruger denne kode:
---
Den første udgave i VB.NET:

Imports System
Imports System.IO

Class MainClass

    Public Shared Sub lookup(ByVal dir As String)
        Dim files As String() = Directory.GetFiles(dir)
        For Each f As String In files
            Console.WriteLine(f)
        Next
        Dim dirs As String() = Directory.GetDirectories(dir)
        For Each d As String In dirs
            lookup(d)
        Next
    End Sub

    Public Shared Sub Main(ByVal args As String())
        lookup("C:\WINNT")
    End Sub
End Class
---


Jeg kan sku ikke finde ud af det... måske jeg bare er træt....
Avatar billede arne_v Ekspert
20. maj 2004 - 20:46 #14
Imports System
Imports System.IO

Class MainClass
    Public Shared Function count(ByVal dir As String) As Integer
        Dim res As Integer = Directory.GetFiles(dir).Length
        Dim dirs As String() = Directory.GetDirectories(dir)
        For Each d As String In dirs
            res = res + count(d)
        Next
        count = res
    End Function

    Public Shared Sub Main(ByVal args As String())
        Console.WriteLine(count("C:\WINNT"))
    End Sub
End Class
Avatar billede dollas Nybegynder
20. maj 2004 - 20:47 #15
Nu har jeg lavet en counter...

Men når jeg tæller med min code for jeg et tal, og dår jeg laver en dir /s i min cmd så får jeg et andet... ? Hvorfor?
Avatar billede arne_v Ekspert
20. maj 2004 - 20:51 #16
Min kode og dir/s/a (/a for hidden files) giver samme resultat 9503 på min PC.
Avatar billede dollas Nybegynder
20. maj 2004 - 20:54 #17
ahh, ja, /a for hidden... sorry...

Og så lige noget hjælp til filesize, så er skal jeg nok stoppe uden flere point...

Det her virker IKKE

If files.GetLength(f) = 0 Then TextBox1.AppendText(f & vbCrLf)
Avatar billede dollas Nybegynder
20. maj 2004 - 20:56 #18
Virker den også på dirs, for der er mit tal forkert, men det er måske forde at dir tæller . og .. som dirs ???
Avatar billede dollas Nybegynder
20. maj 2004 - 20:58 #19
ahh, files er bare et array... skal bruge Directory.GetFiles ?
Avatar billede arne_v Ekspert
20. maj 2004 - 21:06 #20
Nu stod jeg af.

Hvad er spørgsmålet ?
Avatar billede dollas Nybegynder
20. maj 2004 - 21:08 #21
sorry...

Den skal tælle filer og dirs.

Og så skal jeg have en variabel med fil størrelsen i en variabel for hver fil...
altså bare en jeg kan checke størrelsen på og så gå vidre ? er du med?
Avatar billede arne_v Ekspert
20. maj 2004 - 21:34 #22
Imports System
Imports System.IO

Class MainClass
    Public Shared Function count(ByVal dir As String) As Integer
        Dim res As Integer = 3
        Dim dirs As String() = Directory.GetDirectories(dir)
        For Each d As String In dirs
            res = res + count(d)
        Next
        count = res
    End Function

    Public Shared Sub Main(ByVal args As String())
        Console.WriteLine(count("C:\WINNT") - 1)
    End Sub
End Class

giver samme antal som dir/s/a

3 = sig selv + . + ..
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
Kurser inden for grundlæggende programmering

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