Avatar billede j3ppah Novice
12. august 2008 - 11:10 Der er 10 kommentarer og
1 løsning

Read file/folder names, problemer

Dav eksperter... sidder med et problem... er ny inden for c# programmering, og jeg skal have fundet en metode hvorpå jeg kan give en destination som fx. c:/film, og der skal den så tage alle fil navne / folder navne og smide ned i et txt dokument i alfabetisk orden...

1. jeg kan ikke finde koden for at læse fil navne, eller folder.

2. Kan ikke rigtigt finde ud af om jeg skal få den til at kører i en do while, mens den checker op på at når den finder en som den allerede har, skal den stoppe...

Som sagt er jeg ganske ny...
Avatar billede jokkejensen Novice
12. august 2008 - 11:13 #1
Mener det er System.IO.DirectoryInfo eller lig.

Du får nok en collection af en art over filer og mapper, som sikkert kan sorteres ordentligt.

Venligst
/J
Avatar billede j3ppah Novice
12. august 2008 - 11:35 #3
okay.. er nåed så langt her...

Men hvad skal jeg have i min tw.WriteLine(); ??...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Movie_Libary
{
    public partial class Form1 : Form
    {
        String MovieFolderPath;
        String LibaryFilePath;

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            MovieFolderPath = textBox1.Text;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            LibaryFilePath = textBox2.Text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DirectoryInfo di = new DirectoryInfo(MovieFolderPath);

            TextWriter tw = new StreamWriter(LibaryFilePath);

            tw.WriteLine();

            tw.Close();
        }
    }
}
Avatar billede jokkejensen Novice
12. august 2008 - 11:44 #4
Kig på CopyAll metoden på ovenstående link.

Du skal nok bare i stedet for fi.CopyTo gemme i din fil.

Venligst.
/J
Avatar billede j3ppah Novice
12. august 2008 - 11:55 #5
du kunne vel ikke hjælpe mig lidt mere ved at sætte det ind...
For kender ikke halvdelen af de koder der er brugt og er meget i tvivl om hvordan det skal smækkes sammen
Avatar billede j3ppah Novice
12. august 2008 - 12:03 #6
det ser sådan her ud nu... skal jeg så have hate button1 til at kalde den ?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Movie_Libary
{
    public partial class Form1 : Form
    {
        String MovieFolderPath;
        String LibaryFilePath;

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            MovieFolderPath = textBox1.Text;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            LibaryFilePath = textBox2.Text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DirectoryInfo di = new DirectoryInfo(MovieFolderPath);
        }

        public static void CopyAll(DirectoryInfo MovieFolderPath, DirectoryInfo LibaryFilePath)
        {
            // Check if the target directory exists, if not, create it.
            if (Directory.Exists(LibaryFilePath.FullName) == false)
            {
                Directory.CreateDirectory(LibaryFilePath.FullName);
            }

            // Copy each file into it's new directory.
            foreach (FileInfo fi in MovieFolderPath.GetFiles())
            {
                Console.WriteLine(@"Copying {0}\{1}", LibaryFilePath.FullName, fi.Name);
                fi.CopyTo(Path.Combine(LibaryFilePath.ToString(), fi.Name), true);
            }

            // Copy each subdirectory using recursion.
            foreach (DirectoryInfo diSourceSubDir in MovieFolderPath.GetDirectories())
            {
                DirectoryInfo nextTargetSubDir =
                    LibaryFilePath.CreateSubdirectory(diSourceSubDir.Name);
                CopyAll(diSourceSubDir, nextTargetSubDir);
            }
        }

    }
}
Avatar billede jokkejensen Novice
12. august 2008 - 13:03 #7
static void Main(string[] args)
        {
            TextWriter tw = new StreamWriter(@"c:\test.txt");
            DirectoryInfo dir = new DirectoryInfo(@"C:\windows");
            CopyAll(dir, tw);
            tw.Close();
            Console.ReadLine();

        }

        public static void CopyAll(DirectoryInfo source, TextWriter tw)
        {

            // Copy each file into it's new directory.
            foreach (FileInfo fi in source.GetFiles())  {
               
                //fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
                tw.WriteLine(fi.FullName);
            }

            // Copy each subdirectory using recursion.
            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()){
               
                CopyAll(diSourceSubDir, tw);
            }
        }
Avatar billede j3ppah Novice
12. august 2008 - 13:45 #8
lige et sidste spørgsmål :)... hvad nu hvis jeg kun vil havde den til at tage hoved mapperne under windows.. eksempelvis... så den ikke tager alle mapper og filer under hver mappe... :)... og mange tak det andet virkede perfekt...
Avatar billede jokkejensen Novice
13. august 2008 - 10:15 #9
Du kan se i CopyAll funktionen at når den møder et DirectoryInfo object i source.GetDirectories(), så kører den samme funktionen igen. Det er netop her at undermapper kommer med.

Altså kan du bare udkommentere linien, eller lave en bool, der fortæller om undermapper skal med ala:

Psuedo (ikke teste)

        public static void CopyAll(DirectoryInfo source, TextWriter tw, bool takeSubs)
        {

            // Copy each file into it's new directory.
            foreach (FileInfo fi in source.GetFiles())  {
               
                //fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
                tw.WriteLine(fi.FullName);
            }
if(takeSubs)
{
            // Copy each subdirectory using recursion.
            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()){
               
                CopyAll(diSourceSubDir, tw);
            }
}
        }


Så kalder du den med

copyAll(new DirectoryInfo(@"c:\windows"), tw, false) // ingen undermapper
copyAll(new DirectoryInfo(@"c:\windows"), tw, true) // med undermapper.
Avatar billede j3ppah Novice
13. august 2008 - 10:22 #10
fandt ud af bare at lave den om til fi.name i stedet for fullname... virkede til mit formål :)...

Men du har været en kæmpe hjælp, så her er points ;)
Avatar billede jokkejensen Novice
13. august 2008 - 15:03 #11
Åhh okay, jeg trode du ikke vil have den til at iterere igennem undermapperne.. men kun tage den ene..

FileInfo klassen har en masse egenskaber og metoder  -

Læs mere her:

http://msdn.microsoft.com/en-us/library/system.io.fileinfo_members.aspx

Og tak for points.
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