Avatar billede Spotgun Seniormester
23. november 2004 - 10:30 Der er 4 kommentarer og
1 løsning

Størrelse på mappe (incl. subdirs)

Hvordan finder jeg nemmest størrelsen på en mappe, samt alle filer og undermapper der måtte være under mappen?

Jeg kunne selvfølgelig lave en rekursiv funktion der pløjede hele filstrukturen igennem og lagde alle filstørrelser sammen, men jeg tænkte at der da måtte findes en nemmere måde at gøre det på i frameworket. Er der det, eller må jeg selv igang?
Avatar billede arne_v Ekspert
23. november 2004 - 10:40 #1
Jeg tror ikke at du kan undgå at løbe hele strukturen igennem.

Det er også ret nemt.

Skelet:

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:\dir");
    }
}
Avatar billede Spotgun Seniormester
23. november 2004 - 10:46 #2
Det var nu heller ikke fordi jeg syntes det var svært at lave sådan en funktion, men hvis nu der var en metode i frameworket der allerede kunne det samme, så var der jo ingen grund til at opfinde den dybe tallerken en gang til :)

Smid et svar, jeg går ud fra at det ikke kan lade sig gøre på andre måder...
Avatar billede arne_v Ekspert
23. november 2004 - 10:47 #3
Komplet løsning:

using System;
using System.IO;

class MainClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine(TotalSize(@"C:\dir"));
    }
    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 = res + allf[i].Length;
          }
          DirectoryInfo[] alld = d.GetDirectories();
          for (int i = 0; i < alld.Length; i++) {
            res = res + TotalSize(alld[i].FullName);
          }
          return res;
    }
}
Avatar billede arne_v Ekspert
23. november 2004 - 10:48 #4
Jeg kender ihvertfald ikke noget i frameworket som umiddelbart kan returnere den information.
Avatar billede Spotgun Seniormester
23. november 2004 - 11:06 #5
Rodede lidt videre med det, og fandt frem til en marginalt nemmere måde at gøre det på. Dog stadigvæk samme princip:

public static long dirSize(string path)
{
    long size = 0;
    DirectoryInfo dir = new DirectoryInfo(path);
    foreach(FileInfo f in dir.GetFiles())
    {
        size += f.Length;
    }
    foreach(DirectoryInfo d in dir.GetDirectories())
    {
        size += dirSize(d.FullName);
    }
    return size;
}
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