C# Array Inhalt

10/27/2013 22:05 .QaDusch#1
Hey zusammen,

da ich neu in C# bin, hab ich folgendes Problem;

Ich wähle MP3 Files per OpenFileDialog aus und die Pfade werden dann in ein Array eingefügt bzw gespeichert. Problem ist, wenn ich weitere Dateien auswähle, wird mein Array nicht addiert sondern einfach ersetzt. Bedeutet also, wenn ich später nur ein Lied auswähle, ist in meinem Array nur dieses eine Lied.

Nun meine Frage;

Wie bekomme ich es hin, das mein Array einfach addiert wird und nicht ersetzt?
Jeglicher Denkanstoß währe von Vorteil, eventuell auch eine andere Methode die files zu speichern.
10/27/2013 22:40 snow#2
Zeig bitte deinen bisherigen Code, grundsätzlich solltest du die ausgewählten Dateien deinem Array via .Add hinzufügen können.
10/27/2013 23:10 .QaDusch#3
Quote:
Originally Posted by snow911 View Post
Zeig bitte deinen bisherigen Code, grundsätzlich solltest du die ausgewählten Dateien deinem Array via .Add hinzufügen können.
Code:
OpenFileDialog openFileDialog1 = new OpenFileDialog();
            WMPLib.IWMPPlaylist playlist = axWindowsMediaPlayer1.newPlaylist("myPlaylist", string.Empty);
            openFileDialog1.Multiselect = true;
            WMPLib.IWMPMedia media;
            openFileDialog1.Filter = "Musik|*.wma;*.wmv;*.mp3";
            DialogResult res = openFileDialog1.ShowDialog();
            if (res == DialogResult.OK)
            {

                files4 = openFileDialog1.SafeFileNames; // speicher nur die namen
                paths3 = openFileDialog1.FileNames; // speichert ganzen Pfad

                string[] array1 = paths3; // Verwende ich, um MP3 File zu speichern

                    for (int i1 = 0; i1 < files4.Length; i1++)
                    {
                        for (int i2 = 1; i2 <= 1; i2++)
                        {
                            listView1.Items.Add(new ListViewItem(new string[] { "0" + i2.ToString(), files4[i1], paths3[i1] }));

                        }
                        
                        }
                        foreach (string name in paths3)
                        {
                            media = axWindowsMediaPlayer1.newMedia(name);
                            playlist.appendItem(media);

                            axWindowsMediaPlayer1.currentPlaylist = playlist;
                            axWindowsMediaPlayer1.Ctlcontrols.play();
             
                        }

            }
So sieht mein Code aus.
Erst wähle ich die Lieder, diese kommen dann in array1.
array1 wird dann als Playlist verwendet. Adde ich aber neue Lieder, geht die alte Playlist verloren.
Wie gesagt, bin noch neuling in C#.
10/27/2013 23:53 Syc#4
[Only registered and activated users can see links. Click Here To Register...]
10/28/2013 00:34 .QaDusch#5
Quote:
Originally Posted by Sycophantic View Post
[Only registered and activated users can see links. Click Here To Register...]
So wie ich das verstanden habe, bindet er 2 Arrays zu einem?
Bringt mich nicht relativ weit, da ich nur ein Array habe.
10/28/2013 00:42 Shawak#6
Das könnte daran liegen, dass du deine Playlist immer neu definierst:

Code:
WMPLib.IWMPPlaylist playlist = axWindowsMediaPlayer1.newPlaylist("myPlaylist", string.Empty);
Du solltest mal versuchen diese global zu machen.
10/28/2013 00:53 .QaDusch#7
Quote:
Originally Posted by Shawak View Post
Das könnte daran liegen, dass du deine Playlist immer neu definierst:

Code:
WMPLib.IWMPPlaylist playlist = axWindowsMediaPlayer1.newPlaylist("myPlaylist", string.Empty);
Du solltest mal versuchen diese global zu machen.
Kann also nicht daran liegen das meine Array liste immer neu zugeteilt wird?
Eventuell hast du ja einen Link wie man soetwas ähnliches Global setzt.
10/28/2013 00:55 tolio#8
benutze eine list(of type) das ist die managed alternative zu arrays
10/28/2013 01:24 .QaDusch#9
Quote:
Originally Posted by tolio View Post
benutze eine list(of type) das ist die managed alternative zu arrays
Das habe ich im Internet auch angetroffen, mein Problem jedoch ist, das ich nicht weiß wie ich die auswählten Dateien vom OpenFileDialog einbinde bzw addiere.

Code:
List<Person> liste = new List<Person>();
    // generische Liste füllen
    Person pers1 = new Person("Meier", "Berlin");
    liste.Add(pers1);
    Person pers2 = new Person("Arnhold", "Köln");
    liste.Add(pers2);
So sieht der Code der Seite openbook aus. Ich möchte halt meine ausgewählten Files addieren und nicht Name und Wohnort.

Mein Ansatz war halt;

Code:
                               List<string> Pfade = new List<string>();
                Pfade.AddRange(openFileDialog1.FileNames);
Es wird auch alles in Pfade geschrieben, jedoch bleibt das Problem;
Es wird nicht addiert sondern eben überschrieben. Füge ich 2 neue Lieder ein, dann werden nur diese zwei abgespielt. Nur Add bringt nichts, da kommen Fehleranzeigen.
10/28/2013 01:37 snow#10
Das Problem liegt hier nicht an AddRange, es liegt nach wie vor an deinem Gültigkeitsbereich.
Mit
Code:
WMPLib.IWMPPlaylist playlist = axWindowsMediaPlayer1.newPlaylist("myPlaylist", string.Empty);
erstellst du immer eine neue Playlist und setzt sie hier:
Code:
axWindowsMediaPlayer1.currentPlaylist = playlist;
.

Initialisiere einfach das currentPlaylist-Objekt im Konstruktor und füg dann in der foreach-Loop via .appendItem die media-Objekte hinzu.

Evtl. solltest du dir anschauen, wie das mit den Zuweisungen etc. funktioniert, bevor du dich an ein solches Projekt setzt.
10/28/2013 01:45 Shawak#11
Du darfst die Variable auch nur einmal neu zuordnen, pack das mal in deinen Konstruktor und lösche es sonst überall:

Code:
 List<string> Pfade = new List<string>();
10/28/2013 02:19 .QaDusch#12
Quote:
Originally Posted by Shawak View Post
Du darfst die Variable auch nur einmal neu zuordnen, pack das mal in deinen Konstruktor und lösche es sonst überall:

Code:
 List<string> Pfade = new List<string>();
Ohweh, ich danke dir.
Stimmt, bei jedem Klick und bei jedem openFileDialog schreibt der das neu.

Quote:
Originally Posted by snow911 View Post
Das Problem liegt hier nicht an AddRange, es liegt nach wie vor an deinem Gültigkeitsbereich.
Mit
Code:
WMPLib.IWMPPlaylist playlist = axWindowsMediaPlayer1.newPlaylist("myPlaylist", string.Empty);
erstellst du immer eine neue Playlist und setzt sie hier:
Code:
axWindowsMediaPlayer1.currentPlaylist = playlist;
.

Initialisiere einfach das currentPlaylist-Objekt im Konstruktor und füg dann in der foreach-Loop via .appendItem die media-Objekte hinzu.

Evtl. solltest du dir anschauen, wie das mit den Zuweisungen etc. funktioniert, bevor du dich an ein solches Projekt setzt.

Hat mir einen Denkanstoß gegeben, Shawak hat mir dann die Lösung gezeigt.
Ich danke euch.