Avatar billede dennisjuul Nybegynder
23. maj 2005 - 14:39 Der er 6 kommentarer og
2 løsninger

Antallet af filer i mapper og undermapper

Hejsa...

Jeg er ved at lave et lille program (WinForm), der skal kunne kopiere alle filer fra en mappe til en anden (inklusiv undermapper).

Men da jeg gerne vil kunne vise brugeren hvor langt den samlede kopiering er kommet, vil jeg gerne enten have et samlet antal filer i mapperne eller antal bytes, som så kan tælles op i løbet at kopieringen.

Jeg har styr på selve kopieringen af filerne.

Er der nogen der kan hjælpe mig med det?

mvh. Dennis
Avatar billede nielle Nybegynder
23. maj 2005 - 14:56 #1
using System;
using System.IO;

namespace Eksperten
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            DirectoryInfo DI = new DirectoryInfo(@"C:\Windows");

            Console.WriteLine(DI.GetDirectories().Length);
            Console.WriteLine(DI.GetFiles().Length);
        }
    }
}
Avatar billede arne_v Ekspert
23. maj 2005 - 14:57 #2
using System;
using System.IO;

class MainClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine(TotalSize(@"C:\WINDOWS"));
    }
    public static long TotalSize(string dir)
    {
        long res = 0;
        DirectoryInfo d = new DirectoryInfo(dir);
        FileInfo[] allf = d.GetFiles();
        for (int i = 0; i < allf.Length; i++) {
            res += allf[i].Length;
        }
        DirectoryInfo[] alld = d.GetDirectories();
        for (int i = 0; i < alld.Length; i++) {
            res += TotalSize(alld[i].FullName);
        }
        return res;
    }
}
Avatar billede nielle Nybegynder
23. maj 2005 - 15:02 #3
using System;
using System.IO;

namespace Eksperten
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            DirectoryInfo DI = new DirectoryInfo(@"C:\Windows");

            Console.WriteLine(ProcesDI(DI));
        }

        private static int ProcesDI(DirectoryInfo DI)
        {
            int FilTotal = DI.GetFiles().Length;

            foreach (DirectoryInfo SubDI in DI.GetDirectories())
            {
                FilTotal += ProcesDI(SubDI);
            }

            return FilTotal;
        }
    }
}
Avatar billede dennisjuul Nybegynder
23. maj 2005 - 15:20 #4
Tak for de hurtige svar...

Hvis I begge vil give et svar, så der kan uddeles point.

mvh. Dennis
Avatar billede nielle Nybegynder
23. maj 2005 - 15:23 #5
Begge dele i et hug:

using System;
using System.IO;

namespace Eksperten
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            DirectoryInfo DI = new DirectoryInfo(@"C:\Windows");

            long TotalNoOfFiles = 0;
            long TotalSizeOfFiles = 0;

            ProcesDI(DI, ref TotalNoOfFiles, ref TotalSizeOfFiles);

            Console.WriteLine("Filer: {0} stk., Størrelse: {1} B", TotalNoOfFiles, TotalSizeOfFiles);
        }

        private static void ProcesDI(DirectoryInfo ThisDI, ref long TotalNoOfFiles, ref long TotalSizeOfFiles)
        {
            TotalNoOfFiles += ThisDI.GetFiles().Length;

            foreach (FileInfo FI in ThisDI.GetFiles())
            {
                TotalSizeOfFiles += FI.Length;
            }

            foreach (DirectoryInfo SubDI in ThisDI.GetDirectories())
            {
                ProcesDI(SubDI, ref TotalNoOfFiles, ref TotalSizeOfFiles);
            }
        }
    }
}
Avatar billede arne_v Ekspert
23. maj 2005 - 15:26 #6
svar
Avatar billede arne_v Ekspert
23. maj 2005 - 15:26 #7
husk iøvrigt at ingen af tallene vil matche kopieringen 100% hvis der sker ændringer
undervejs
Avatar billede dennisjuul Nybegynder
23. maj 2005 - 15:38 #8
yes, tak for det.
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