# FolderBrowserDialog Problem - Mp3 Dateien bearbeiten und speichern



## GUI-Programmer (21. Feb 2014)

Hallo zusammen,

ich habe bereits im Forum Allgemeine  Java-Themen einen Thread: http://www.java-forum.org/allgemeine-java-themen/158475-mp3-dateien-bearbeiten-speichern.html

Da ich jedoch unbedingt schnell zum Zeil kommen wollte, habe ich mich mal eine andere Sprache (C#) ausprobiert. Das Bearbeiten und Speichern hat geklappt, allerdings hat sich der FolderBrowserDialog nur beim Ausführen in meiner Entwicklungsumgebung (MS Visual Studio Ultimate 2013) geöffnet und nicht beim Doppelklick auf die im Projektordner erstellte .exe Datei.

Da ich neu bei C# bin denke ich dass es wohl ein Anfängerproblem sein wird und recht schnell gelöst sein wird. Danke im Vorraus!


```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
using System.Drawing;
using System.Runtime.InteropServices;


namespace Mp3_Editor
{
    class Application
    {
        //[DllImport("kernel32.dll")]
        //static extern IntPtr GetConsoleWindow();

        //[DllImport("user32.dll")]
        //static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        //const int SW_HIDE = 0;
        //const int SW_SHOW = 5;


        [STAThread]
        static void Main(string[] args)
        {
            //var handle = GetConsoleWindow();
            //ShowWindow(handle, SW_HIDE);
            new Application();
        }

        public Application()
        {

            try 
            {
                FolderBrowserDialog fbd = new FolderBrowserDialog();

                fbd.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Music";
                DialogResult result = fbd.ShowDialog();

                DirectoryInfo di = new DirectoryInfo(fbd.SelectedPath);
                FileInfo[] logFiles = di.GetFiles();

                DateCompareFileInfo dateCompareFileInfo = new DateCompareFileInfo();

                Array.Sort(logFiles, dateCompareFileInfo);

                for (int i = 0; i < logFiles.Length; i++)
                {
                    TagLib.File fileMp3 = TagLib.File.Create(logFiles[i].FullName);
                    int n = i + 1;
                    fileMp3.Tag.Track = (uint)n;
                    fileMp3.Save();

                    string number;
                    if (n < 10)
                        number = "0" + n;
                    else
                        number = "" + n;
                    File.Move(logFiles[i].FullName, logFiles[i].DirectoryName + "\\" + number + " - " + logFiles[i].Name);

                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
            
        }
    }
}
```


```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Mp3_Editor
{
    class DateCompareFileInfo : IComparer<FileInfo>
    {
        /// <summary>
        /// Compare the last dates of the File infos
        /// </summary>
        /// <param name="fi1">First FileInfo to check</param>
        /// <param name="fi2">Second FileInfo to check</param>
        /// <returns></returns>
        public int Compare(FileInfo fi1, FileInfo fi2)
        {
            int result;
            if (fi2.LastWriteTime == fi1.LastWriteTime)
            {
                result = 0;
            }
            else if (fi2.LastWriteTime < fi1.LastWriteTime)
            {
                result = 1;
            }
            else
            {
                result = -1;
            }

            return result;
        }
    }
}
```


----------



## GUI-Programmer (22. Feb 2014)

Problem gelöst!
Das Problem bestand darin dass ich eine Konsole und keine GUI erzeugt habe.

Hier das funktionierende Programm:

```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;

namespace Mp3_Editor
{
    /// <summary>
    /// Programm zum Nummerieren von Mp3-Dateien in einem Ordner anhand ihres Änderungsdatums.
    /// </summary>
    static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            // Dialog wird geöffnet um den Ordner auswählen zu können,in welchem sich die bearbeitenden
            // Musikdateien befinden
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.Description = "Musikverzeichnis auswählen";
            fbd.ShowNewFolderButton = false;
            fbd.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Music";
            DialogResult result = fbd.ShowDialog();

            try
            {
                // Eintragen der Mp3-Dateien des Ordners in ein Array
                DirectoryInfo di = new DirectoryInfo(fbd.SelectedPath);
                FileInfo[] logFiles = di.GetFiles("*.mp3");

                // Sortieren der Mp3-Dateien nach deren Änderungsdatum
                DateCompareFileInfo dateCompareFileInfo = new DateCompareFileInfo();
                Array.Sort(logFiles, dateCompareFileInfo);

                // Bearbeiten der jeweiligen Mp3-Datei
                for (int i = 0; i < logFiles.Length; i++)
                {
                    // Festlegen der Titelnummer
                    int n = i + 1;
                    
                    // Ermitteln des Interpreten und des Titels
                    Regex regex = new Regex(" - ");
                    string[] substrings = regex.Split(logFiles[i].Name.Replace(".mp3", ""));

                    // Eintragen des Interpreten, Titels und der Titelnummer
                    TagLib.File fileMp3 = TagLib.File.Create(logFiles[i].FullName);
                    if (substrings != null && substrings.Length == 2)
                    {
                        fileMp3.Tag.Performers = new String[] { substrings[0] };
                        fileMp3.Tag.Title = substrings[1];
                    }
                    fileMp3.Tag.Track = (uint) n;
                    fileMp3.Save();

                    // Umbennen der Datei
                    string number;
                    if (n < 10)
                        number = "0" + n;
                    else
                        number = "" + n;
                    File.Move(logFiles[i].FullName, logFiles[i].DirectoryName + "\\" + number + " - " + logFiles[i].Name);

                }
            }
            catch (Exception ex)
            {
                // Ausgeben einer Fehlermeldung
                MessageBox.Show(ex.Message, "Fehler");
                return;
            }
        }
    }
}
```


```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Mp3_Editor
{
    /// <summary>
    /// Klasse zum vergleichen des Änderungsdatums zweier Dateien.
    /// </summary>
    class DateCompareFileInfo : IComparer<FileInfo>
    {
        /// <summary>
        /// Compare the last dates of the File infos
        /// </summary>
        /// <param name="fi1">First FileInfo to check</param>
        /// <param name="fi2">Second FileInfo to check</param>
        /// <returns></returns>
        public int Compare(FileInfo fi1, FileInfo fi2)
        {
            int result;
            if (fi2.LastWriteTime == fi1.LastWriteTime)
            {
                result = 0;
            }
            else if (fi2.LastWriteTime < fi1.LastWriteTime)
            {
                result = 1;
            }
            else
            {
                result = -1;
            }

            return result;
        }
    }
}
```


----------

