Avatar billede area404 Nybegynder
19. november 2008 - 16:52 Der er 19 kommentarer og
1 løsning

CreationTime - Find måned

Hej!

Søger lidt hjælp til at finde creationtime (måned) for en række filer i en folder.

DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath("/filer/"));
foreach (FileInfo f3 in dirInfo.GetFiles("*.*"))
{
// find måned for hver fil.
}
// udskriv liste over måneder

Nogen der kan hjælpe?
/Ron
Avatar billede arne_v Ekspert
19. november 2008 - 16:58 #1
havd er der galt med f3.CreationTime.Month ?
Avatar billede area404 Nybegynder
19. november 2008 - 17:09 #2
Det er fint nok, ville gerne på en smart måde udskrive: jan, feb etc.. for hver enkelt fil. Bruger man da en case, eller findes der smartere?
Avatar billede arne_v Ekspert
19. november 2008 - 17:12 #3
proev:

f3.CreationTime.ToString("MMM")
Avatar billede area404 Nybegynder
19. november 2008 - 17:13 #4
dog skal den ikke skrive f.eks. februar 2 gange når op til flere filer er oprettet på i denne måned
Avatar billede arne_v Ekspert
19. november 2008 - 17:33 #5
Ah. Du vil have maanederne uden duplikater.

Lav et HashSet<string>, tilfoej f3.CreationTime.ToString("MMM") inde i den nuvaende
loekke og udskriv det i en ny loekke.
Avatar billede kalp Novice
19. november 2008 - 17:33 #6
Gem de anvendte måneder i en List collection eller lignende og tjek i den først ud udskriver om den findes i forvejen.
Avatar billede kalp Novice
19. november 2008 - 17:34 #7
Det er vel hurtigere, at gemme løbende og tjekke på ! collection.Contains(mm);
end 2 løkker hvis der er mange mange filer.. det ville jeg tro umiddelbart uden at have testet
Avatar billede kalp Novice
19. november 2008 - 17:34 #8
men så skal man nok ikke benytte List:P
Avatar billede arne_v Ekspert
19. november 2008 - 17:43 #9
HashSet undgaar automatisk duplikater.

Hvis der ikke udskrives noget andet i den eksisterende loekke saa kan man fint udskrive i den.
Avatar billede kalp Novice
19. november 2008 - 18:00 #10
Det mere om det er hurtigere, at udskrive i første løkke og tjekke på et index om værdien skal udskrives.

Hvis dette tjek er hurtigere end endnu en løkke som skal løbes igennem
Avatar billede area404 Nybegynder
19. november 2008 - 18:09 #11
hvordan ville noget af det se ud i praksis?
Avatar billede arne_v Ekspert
19. november 2008 - 18:19 #12
using System;
using System.Collections.Generic;
using System.IO;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\");
            HashSet<string> hs = new HashSet<string>();
            foreach(FileInfo fi in di.GetFiles("*.bat"))
            {
                Console.WriteLine(fi.Name);
                hs.Add(fi.CreationTime.ToString("MMM"));
            }
            Console.Write("Months:");
            foreach(string m in hs)
            {
                Console.Write(" " + m);
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Avatar billede arne_v Ekspert
19. november 2008 - 18:19 #13
eller:

using System;
using System.Collections.Generic;
using System.IO;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\");
            HashSet<string> hs = new HashSet<string>();
            Console.Write("Months:");
            foreach(FileInfo fi in di.GetFiles("*.bat"))
            {
                string m = fi.CreationTime.ToString("MMM");
                if(!hs.Contains(m))
                {
                    Console.Write(" " + m);
                    hs.Add(m);
                }
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Avatar billede area404 Nybegynder
19. november 2008 - 18:34 #14
CS0246: The type or namespace name 'HashSet' could not be found (are you missing a using directive or an assembly reference?)
Dur ikke :-/
Avatar billede arne_v Ekspert
19. november 2008 - 18:37 #15
Er du paa .NET 3.5 / C# 3.0 / VS 2008 ?

Hvis ja saa tilfoej en ref til System.Core.dll !

Hvis nej, saa skal HashSet<string> aendres til en Dictionary<string, anything> og koden
justeres lidt.
Avatar billede area404 Nybegynder
19. november 2008 - 18:41 #16
.NET 2.0
Avatar billede arne_v Ekspert
19. november 2008 - 18:51 #17
using System;
using System.Collections.Generic;
using System.IO;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\");
            Dictionary<string, string> hs = new Dictionary<string, string>();
            foreach(FileInfo fi in di.GetFiles("*.bat"))
            {
                Console.WriteLine(fi.Name);
                string m = fi.CreationTime.ToString("MMM");
                if(!hs.ContainsKey(m))
                {
                    hs.Add(m, null);
                }
            }
            Console.Write("Months:");
            foreach(string m in hs.Keys)
            {
                Console.Write(" " + m);
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Avatar billede arne_v Ekspert
19. november 2008 - 18:51 #18
using System;
using System.Collections.Generic;
using System.IO;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\");
            Dictionary<string, string> hs = new Dictionary<string, string>();
            Console.Write("Months:");
            foreach(FileInfo fi in di.GetFiles("*.bat"))
            {
                string m = fi.CreationTime.ToString("MMM");
                if(!hs.ContainsKey(m))
                {
                    Console.Write(" " + m);
                    hs.Add(m, null);
                }
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Avatar billede area404 Nybegynder
19. november 2008 - 19:07 #19
takker.. lige hvad jeg manglede :-)
smid svar
Avatar billede arne_v Ekspert
19. november 2008 - 19:17 #20
svar
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