Avatar billede pk69 Nybegynder
15. september 2013 - 21:45 Der er 9 kommentarer og
1 løsning

Slette fil i mange undermapper der hedder det samme

Hej,

jeg er lidt rusten i min kodning, så vil gerne have lidt hjælp da jeg ikke lige kan gennemskue hvordan jeg skal gribe det an.

Jeg har en række filer i følgende struktur

c:\mappe\john\doku\info.txt
c:\mappe\john\info.txt
c:\mappe\per\doku\info.txt
c:\mappe\per\info.txt
etc....

Jeg vil gerne have slettet alle info.txt i undermappen doku, men ikke i mapperne john og per osv.

Hvordan gør jeg lige det på en smart måde?

jeg har leget lidt med

foreach (string stimappe in Directory.EnumerateFiles(@"c:\mappe\",
        "info.txt",
        SearchOption.AllDirectories))

i forbindelse med at jeg skulle ændre nogle linier tekst i filen, men der havde jeg linier som kun var i bestemte info.txt filer, så der kunne differentieres let.

/PK
Avatar billede Syska Mester
15. september 2013 - 21:58 #1
Kan du ikke:

Finde alle directories under "C:\mappe", dvs "John" og "Per" og derefter søge igennem dem du finder.

Dvs:
C:\mappe\John\Doku"
C:\mappe\Per\Doku"

og så slette alle de filer der hedder "info.txt".

mvh
Avatar billede pk69 Nybegynder
15. september 2013 - 22:03 #2
Kan man ikke på en måde lave en wildcard sletning, så jeg sletter alle filer der hedder "*\doku\info.txt" ?
Avatar billede Syska Mester
15. september 2013 - 22:08 #3
Jo, men ved ikke om det ville være hurtigere.

Du kunne jo søge efter alle filer der hedder "info.txt" og så bagefter teste fil navnet op mod:

"\doku\info.txt".

Det skal så gøres mod FileInfo's FullName property.

Det ville også virke.

Ved ikke man kan lave wildcard søgning på et directoty.

mvh
Avatar billede pk69 Nybegynder
15. september 2013 - 22:14 #4
Kan jeg lokke dig til at skrive et par liniers kode eksempel :-) ?

Jeg har ingen anelse om hvordan jeg skal gøre.
Avatar billede Syska Mester
15. september 2013 - 22:14 #5
Lidt andre navne, men du kan gøre sådan her:
var directory = new DirectoryInfo(@"C:\temp");

            FileInfo[] fileInfos = directory.GetFiles(@"info.txt", SearchOption.AllDirectories);

            foreach (var fileInfo in fileInfos)
            {
                Console.WriteLine(fileInfo.FullName);
                if (fileInfo.FullName.EndsWith(@"test\info.txt", StringComparison.OrdinalIgnoreCase))
                {
                    Console.WriteLine("Delete this file");
                }
            }

Lidt søgning siger at wildcard directoties søgning efter filer ikke kan lade sig gøre.

mvh
Avatar billede pk69 Nybegynder
15. september 2013 - 22:29 #6
Du er genial :-) Det virker perfekt og min nattesøvn er reddet.
Takker mange gange.

Hvordan giver jeg dig lige point ?
Avatar billede Syska Mester
15. september 2013 - 22:31 #7
Nattesøvn :-)

Jeg smider et svar du så kan acceptere.
Avatar billede pk69 Nybegynder
15. september 2013 - 22:36 #8
Istedet for
Console.WriteLine("Delete this file");

skal jeg vel skrive

File.Delete();

Men hvad skal der stå i parentes'en ?

(Og så fik jeg også lært at vælge kommentar istedet for svar)
Avatar billede Syska Mester
15. september 2013 - 22:44 #9
fileInfo.Delete()

File er kun en statisk klasse og der kan du give hele filnavnet med:

File.Delete(fileInfo.FullName)

Men så er første option vist nemmere :-)
Avatar billede pk69 Nybegynder
15. september 2013 - 22:48 #10
Tak for superhurtig og kompetent hjælp :-)
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