2016-12-09 2 views
0

Я newbish C# эр и вот мой вопрос:C# ListBox копию в папку

Что я хочу: Copy mp3 файлы одного и того же художника в ту же папку. e.G. Нирвана - Песня 1 & Нирвана - Песня 2 в папку «Нирвана».

Что я делал до сих пор: Прочитайте ParantDirectory и перечислите ингредиенты в список. В списке отображается только Исполнитель (конечно, его отфильтрованный (Подстрока (indexof "-"))). После того, как файлы были прочитаны, мой инструмент создает папку с именем Artist.

И вот я боюсь! Мне нужен фрагмент, который копирует все содержимое Nirvana * в папку Nirvana.

Я действительно надеюсь, что вы, девочки и парни, понимаете, что я пытаюсь сделать ... Заранее благодарю вас!

Привет из Германии, ceteus

редактировать: "Вот мой код"

void Button1Click(object sender, EventArgs e) 
    { 
     listBox1.Items.Clear(); 
     DirectoryInfo ParentDirectory = new DirectoryInfo(@"C:\Users\A7024985\Desktop\_xxx"); 
     label1.Text = ParentDirectory.ToString(); 

     foreach (FileInfo f in ParentDirectory.GetFiles()) 
     { 
      listBox1.Items.Add(f.Name.Substring(0,f.Name.IndexOf("-"))); //nur den Dateinamen anzeigen in Listbox1 
      //listBox1.Items.Add(f.Name); 
     } 

     // DOPPELTE DATEIEN LÖSCHEN in LISTBOX 
     string[] temp = new string[listBox1.Items.Count]; 
     ArrayList newList = new ArrayList(); 

     for(int i = 0; i< listBox1.Items.Count; i++) 
     { 
      temp[i] = listBox1.Items[i].ToString(); 
     } 

     foreach(string ts in temp) 
     { 
      if(!newList.Contains(ts)) 
      { 
       newList.Add(ts); 
      } 
     } 

     listBox1.Items.Clear(); 
     foreach(string ns in newList) 
     { 
      listBox1.Items.Add(ns.ToString()); 
     } 

     foreach(var listboxitem in listBox1.Items) 
     { 
      string pfad = label1.Text + "\\" + listboxitem.ToString(); 
      //DirectoryInfo plop = new DirectoryInfo(name); 
      //FileInfo[] nPath = plop.GetFiles(); 



      try 
      { 
       bool exists = Directory.Exists(pfad); 
       if(!exists) 
       { 
        Directory.CreateDirectory(pfad); 
       } 


      } 

      catch(Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 


    void Button2Click(object sender, EventArgs e) 
    { 
     listBox2.Items.Clear(); 
     DirectoryInfo ParentDirectory = new DirectoryInfo(@"C:\Users\A7024985\Desktop\_xxx"); 

     foreach (FileInfo f in ParentDirectory.GetFiles()) 
     { 
      listBox2.Items.Add(f.Name.Substring(0,f.Name.IndexOf("-"))); 

     } 

     foreach(var listboxitem2 in listBox2.Items) 
     { 
      string item; 
      string umbenannt; 

      File.Copy(@ParentDirectory + "\\" + listboxitem2.ToString(), @ParentDirectory + "\\"); 
      //listBox1.Items.Add(f.Name.Substring(0,f.Name.IndexOf("-"))); 
     } 





    } 
} 
+0

Ну я думаю, что я получаю то, что вы хотите, но вы бы так хорошо, чтобы добавить свой код? Иначе это было бы как рыбалка в темноте, что именно вам не хватает – TripleEEE

+0

вам нужна только копия файла? – abbath

+0

Предполагая, что они находятся в формате '.mp3', [вы можете использовать библиотеку] (https://www.nuget.org/packages/taglib), чтобы получить теги' ID3' этих mp3, создать коллекцию и отсортировать их художниками, создавать папки соответственно и размещать их там. – ThePerplexedOne

ответ

0

Я думаю, у вас есть List<FileInfo>, содержащие файлы? Если это так вы можете пойти с File.Copy как это:

void Button2Click(object sender, EventArgs e) 
{ 
    DirectoryInfo ParentDirectory = new DirectoryInfo(@"C:\Users\A7024985\Desktop\"); 

    string interpret = f.Name.Substring(0, f.Name.IndexOf("-")).TrimEnd(' '); 
    string title = f.Name.Remove(0, interpret.Length+1).TrimStart(' '); 
    File.Copy(f.FullName, ParentDirectory 
      + interpret 
      + "\\" 
      + title); //or f.Name 
} 

Copy ("C: \ Users \ A7024985 \ Desktop \ Nirvana-подросток Spirit.mp3" C: \ Users \ A7024985 \ Desktop \ Nirvana \ Teen Spirit .mp3

+0

мой файл Named Nirvana - придет, как вы есть.mp3, будет ли эта работа для вас тоже фрагмент? – ceteus

+0

Итак, вы все сначала называете своим Интерпретом? - Извините, что я свалка. Конечно, это просто испортило имя файла в моем описании. – TripleEEE

+0

Я искал ваш профиль, Гамбург!Привет из Кельна;) Ваш код работает для меня :) Большое вам спасибо за вашу поддержку! Теперь я попытаюсь понять, что вы послали. -F.FullName - полное имя файла, включая Path? – ceteus

0

Хороший способ сделать это - использовать библиотеку TagLib# (see example here), чтобы найти теги ID3 (Исполнитель, Песня, Альбом и т. д.), а затем создать их коллекцию, а затем отсортировать их , а затем переместите их в новую папку на основе исполнителя.

var songList = new List<string>(); //Contains a list of song files. E.g. "Come As You Are.mp3", "Heart Shaped Box.mp3", "Smells Like Teen Spirit.mp3". 
var tagLibFiles = new List<TagLib.File>(); 
tagLibFiles.AddRange(songList.Select(x => new TagLib.File(x)); 
var nirvanaSongs = tagLibFiles.Where(x => x.Tag.FirstAlbumArtist == "Nirvana").ToList(); 

foreach(var song in nirvanaSongs) 
{ 
    //Move the file to your Nirvana folder. 
} 
+0

Большое спасибо за ваш фрагмент, во-первых, я попробую метод TripleEEE, потому что он ближе к« моему коду ». Но мой старый проект, включая Taglib, также открыт. работаю я попробую ваш код – ceteus

0

Я предполагаю, что li stboxitem.ToString() содержит имя исполнителя.

Тогда:

var filestomove = ParentDirectory.GetFiles().Where(f=>f.Name.Contains(listboxitem.ToString())); 
foreach(var file in filestomove){ 
    File.Move(file.FullName,pfas+file.Nmae) 
} 
+0

Спасибо за ваш код, я попробую этот сейчас. – ceteus