Avatar billede larsny Nybegynder
03. februar 2005 - 19:10 Der er 10 kommentarer og
1 løsning

hente tal ud af object/class?

Hej jeg har et problem med at få tingene udskrevet det rigtige sted...
Jeg har lavet denne kode som skal søge en mappe og alle undermapper igennem for filer og ligge deres størrelse sammen:
void mapsize(string CurrentDirectory, long size) {
  string[] dirs = Directory.GetDirectories(@""+CurrentDirectory,"*");
    foreach (string dir in dirs)
  {
      //Response.Write(Path.GetFileName(dir)+"<br>");
        mapsize(CurrentDirectory+"/"+Path.GetFileName(dir),size);
    }
    string[] dirs2 = Directory.GetFiles(@""+CurrentDirectory,"*");
        foreach (string dir in dirs2)
    {
            FileInfo fi = new FileInfo(CurrentDirectory+"/"+Path.GetFileName(dir));
      //Response.Write(fi.Length+" B<br>");
            size = size-(fi.Length*-1);
        }
}

Den koder der kommer her, er den kode der starter ovenstående.
long size = 0;
mapsize(Directory.GetCurrentDirectory()+"/"+Path.GetFileName(dir),size);

Mit spørgsmål er hvordan jeg henter variablen "size" ud..?
jeg har prøvet:
long mapsize = mapsize(Directory.GetCurrentDirectory()+"/"+Path.GetFileName(dir),size);

Er der nogen der kan hjælpe eller har i brug for mere information/forklaring?

På forhånd tak
Avatar billede arne_v Ekspert
03. februar 2005 - 19:14 #1
Prøv:

void mapsize(string CurrentDirectory, ref long size) {
...

og

long mapsize = 0;
mapsize(Directory.GetCurrentDirectory()+"/"+Path.GetFileName(dir),ref size);
Avatar billede arne_v Ekspert
03. februar 2005 - 19:15 #2
Du skal nok også rette til:

mapsize(CurrentDirectory+"/"+Path.GetFileName(dir),ref size);
Avatar billede arne_v Ekspert
03. februar 2005 - 19:15 #3
Men pointen er brugen af keywordet ref
Avatar billede larsny Nybegynder
03. februar 2005 - 19:23 #4
Perfekt! det virkede :D

Lige hurtigt og måske dumt spørgsmål, men må lige være sikker..
Den udskriver størrelsen i Byte..
Hvordan får jeg den til at udskrive det i KB eller MB med rigtig placering komma?
Avatar billede arne_v Ekspert
03. februar 2005 - 19:29 #5
Først skal du beslutte dig for om KB er 1000 eller 1024 og om MB er 1000000 eller
1048576.

Så må det være en simpel opgave at få formateret en string.
Avatar billede arne_v Ekspert
03. februar 2005 - 19:29 #6
Og et svar
Avatar billede burningice Nybegynder
05. februar 2005 - 02:19 #7
ville det mest logiske ikke være at metoden returnerede en long ?

void mapsize(string CurrentDirectory) {

  long size = 0;
  string[] dirs = Directory.GetDirectories(@""+CurrentDirectory,"*");
    foreach (string dir in dirs)
  {
      //Response.Write(Path.GetFileName(dir)+"<br>");
        mapsize(CurrentDirectory+"/"+Path.GetFileName(dir),size);
    }
    string[] dirs2 = Directory.GetFiles(@""+CurrentDirectory,"*");
        foreach (string dir in dirs2)
    {
            FileInfo fi = new FileInfo(CurrentDirectory+"/"+Path.GetFileName(dir));
      //Response.Write(fi.Length+" B<br>");
            size = size-(fi.Length*-1);
        }

  return size;
}

long size = mapsize(Directory.GetCurrentDirectory()+"/"+Path.GetFileName(dir));
Avatar billede burningice Nybegynder
05. februar 2005 - 02:19 #8
det skal selvfølgelig være

long mapsize(string CurrentDirectory) {

  long size = 0;
  string[] dirs = Directory.GetDirectories(@""+CurrentDirectory,"*");
    foreach (string dir in dirs)
  {
      //Response.Write(Path.GetFileName(dir)+"<br>");
        mapsize(CurrentDirectory+"/"+Path.GetFileName(dir),size);
    }
    string[] dirs2 = Directory.GetFiles(@""+CurrentDirectory,"*");
        foreach (string dir in dirs2)
    {
            FileInfo fi = new FileInfo(CurrentDirectory+"/"+Path.GetFileName(dir));
      //Response.Write(fi.Length+" B<br>");
            size = size-(fi.Length*-1);
        }

  return size;
}
Avatar billede burningice Nybegynder
05. februar 2005 - 02:28 #9
ops, havde ikke set det recursive kald...

long MapSize(string CurrentDirectory)
        {
            long size = 0;
            string[] dirs = Directory.GetDirectories(@""+CurrentDirectory,"*");
           
            foreach (string dir in dirs)
            {
                size = size + MapSize(CurrentDirectory+"/"+Path.GetFileName(dir));
            }

            string[] files = Directory.GetFiles(@""+CurrentDirectory,"*");
            foreach (string file in files)
            {
                FileInfo fi = new FileInfo(CurrentDirectory+"/"+Path.GetFileName(file));
                size = size-(fi.Length*-1);
            }

            return size;
        }
Avatar billede burningice Nybegynder
05. februar 2005 - 02:39 #10
og hvis man skal til at optimere lidt

        static long MapSize(string currentDirectory, bool subDirectories)
        {
            long size = 0;
            DirectoryInfo root = new DirectoryInfo(currentDirectory);
           
            if (subDirectories)
                foreach (DirectoryInfo dir in root.GetDirectories("*")) size = size + MapSize(dir.FullName, true);
           
            foreach (FileInfo file in root.GetFiles("*")) size = size + file.Length;

            return size;
        }
Avatar billede arne_v Ekspert
05. februar 2005 - 10:20 #11
Hvis jeg skulle have koden den fra scratch, så havde jeg sikkert også ladet
den returnere en long. Men nu var der jo en sjælden lejlighed til at bruge ref.
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