Avatar billede j3ppah Novice
13. august 2008 - 10:21 Der er 5 kommentarer og
1 løsning

Directory, only select .img .iso osv.

Hej eksperter... har lavet et lille program som skal kunne lave en xls eller txt fil, med alle mine film og lignende i...
Problemet er nu at jeg også har mange rar filer osv, sammen med mine film. så jeg vil have min kode til kun at tage .img .iso .avi, og alle de andre film formater...

Det er en windows app form. Og er der en nem måde at lave en brose knap... som fx SHBrowseForFolder(); ... dog kan jeg ikke få den til at virke ordenligt...

Her er koden indtil videre:

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();
        }

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

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

        public void button1_Click(object sender, EventArgs e)
        {
           
            TextWriter tw = new StreamWriter(@LibaryFilePath);
            DirectoryInfo dir = new DirectoryInfo(@MovieFolderPath);
            CopyAll(dir, tw);
            tw.Close();
            Console.ReadLine();
        }
       
        public static void CopyAll(DirectoryInfo source, TextWriter tw)
        {

            foreach (FileInfo fi in source.GetFiles())
            {

                tw.WriteLine(fi.Name);
            }

            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {

                CopyAll(diSourceSubDir, tw);
            }
        }
    }
}
Avatar billede j3ppah Novice
13. august 2008 - 10:55 #1
ps. har fået lavet browse knapperne nu...

Update af koden.

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();
        }

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

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

        public void button1_Click(object sender, EventArgs e)
        {
           
            TextWriter tw = new StreamWriter(@LibaryFilePath);
            DirectoryInfo dir = new DirectoryInfo(@MovieFolderPath);
            CopyAll(dir, tw);
            tw.Close();
            Console.ReadLine();
        }
       
        public static void CopyAll(DirectoryInfo source, TextWriter tw)
        {

            foreach (FileInfo fi in source.GetFiles())
            {

                tw.WriteLine(fi.Name);
            }

            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {

                CopyAll(diSourceSubDir, tw);
            }
        }

        public void button2_Click(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
                textBox1.Text = folderBrowserDialog1.SelectedPath; 
        }

        private void button3_Click(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog2.ShowDialog();
            if (result == DialogResult.OK)
                textBox2.Text = folderBrowserDialog2.SelectedPath;
        }
    }
}
Avatar billede Spotgun Seniormester
13. august 2008 - 18:15 #2
Du kan checke på fi.Extension i din CopyAll metode, og kun køre tw.WriteLine(fi.Name) hvis din extension matcher dem du ønsker. Lav evt. en List<string> med dine extensions i.
Avatar billede martchap Nybegynder
13. august 2008 - 18:23 #3
Prøv at gøre sådan her:

        public static void CopyAll(DirectoryInfo source, TextWriter tw)
        {
            string[] filtyper = new string[] { ".img", ".iso", ".avi" };

            foreach (FileInfo fi in source.GetFiles())
            {

                foreach (string filEndelse in filtyper)
                {
                    if (fi.Name.EndsWith(filEndelse) == true)
                    {
                        tw.WriteLine(fi.Name);
                    }
                }
            }

            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {

                CopyAll(diSourceSubDir, tw);
            }
        }
Avatar billede hmortensen Nybegynder
13. august 2008 - 19:05 #4
Evt. tilføje et break og et ToLower() kald:
if (fi.Name.ToLower().EndsWith(filEndelse))
{
  tw.WriteLine(fi.Name);
  break;
}
Avatar billede j3ppah Novice
14. august 2008 - 08:38 #5
fik hjælp af kim bang her índe fra. kim hvis du vil have points skriver du bare over msn, så finder vi ud af noget...

ændrede bare min foreach, og byggede en switch ind i den.

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

            foreach (FileInfo fi in source.GetFiles())
            {
                switch (fi.Extension)
                {
                    case ".avi":
                        tw.WriteLine(fi.Name);
                        break;

                    case ".mov":
                        tw.WriteLine(fi.Name);
                        break;

                    case ".mpeg":
                        tw.WriteLine(fi.Name);
                        break;

                    case ".iso":
                        tw.WriteLine(fi.Name);
                        break;

                    case ".img":
                        tw.WriteLine(fi.Name);
                        break;

                    case ".wmw":
                        tw.WriteLine(fi.Name);
                        break;

                    default:
                       
                        break;
                }

            }

            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {

                CopyAll(diSourceSubDir, tw);
            }
        }
Avatar billede hmortensen Nybegynder
14. august 2008 - 17:36 #6
Eller:
case ".avi":
case ".mov":
case ".mpeg":
case ".iso":
case ".img":
case ".wmw":
  tw.WriteLine(fi.Name);
  break;
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