【问题标题】:C# ListBox copy to FolderC# ListBox 复制到文件夹
【发布时间】:2017-04-24 21:10:00
【问题描述】:

我是一个新手 C#er,这是我的问题:

我想要什么: 将同一艺术家的 mp3 文件复制到同一文件夹中。 例如。 Nirvana - Song 1 & Nirvana - Song 2 放入文件夹“Nirvana”。

到目前为止我一直在做什么: 阅读 ParantDirectory 并将成分列出到列表框中。列表框只显示艺术家(当然是它的过滤(子字符串(indexof“-”)))。读取文件后,我的工具创建一个具有艺术家名称的文件夹。

我在那儿挣扎! 我需要一个将 Nirvana* 的所有内容复制到 Nirvana 文件夹的 sn-p。

我真的希望你们女孩和男孩明白我想要做什么...... 提前致谢!

来自德国的问候, 鲸鱼

编辑:“这是我的代码”

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





    }
}

【问题讨论】:

  • 好吧,我想我得到了你想要的,但是你愿意添加你的代码吗?否则就像在黑暗中钓鱼,你到底错过了什么
  • 您只需要文件复制部分吗?
  • 假设这些是.mp3 格式,you can use a library 获取这些mp3 的ID3 标签,创建一个集合,并按艺术家对其进行排序,相应地创建文件夹并将它们放置在那里。
  • 包括第二个文本框在内的变体只是我尝试过的一个东西......
  • 我已经尝试使用 mp3 库,获取 Artist-Name 并创建文件夹,我只需要“将 Nirvana* 复制到 Nirvana 文件夹”部分

标签: c# foreach listbox


【解决方案1】:

我猜你有一个List&lt;FileInfo&gt; 包含你的文件?如果是这样,您可以像这样使用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-Teen Spirit.mp3" , C:\Users\A7024985\Desktop\Nirvana\Teen Spirit.mp3

【讨论】:

  • 我的文件名为 Nirvana - Come as you are.mp3,这也适用于你 sn-p 吗?
  • 所以你的文件都是先用你的解释命名的? - 对不起,我被转储了 - 当然会,只是在我的描述中弄乱了文件名
  • 我查过你的个人资料,汉堡!来自科隆的问候 ;) 你的代码对我有用 :) 非常感谢你的支持!现在,我将尝试了解您发送的内容。 -f.FullName 是包含路径的完整文件名?
  • 嘿 ;) 向科勒问好 ;) 好吧。 FullName 是路径 + 文件名,其中名称只是文件名”本身。对于标题字符串,您应该在删除时 +1,否则您也会在其中添加 -。我建议您在标题中添加一些 .Trim(' ') -否则你可能会有一些 leeding Whitespaces - 将此添加到答案中
  • Grüß' mir die 看!我查看了所有的测试文件夹,甚至在名称或文件夹中都没有找到“空格”或“-”,完美!
【解决方案2】:

这样做的一个好方法是使用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.
}

【讨论】:

  • 非常感谢您的 Snippet,首先我会尝试 TripleEEE 的方法,因为它更接近“我的代码”。但是我的旧项目包括 Taglib 也是开放的。当我得到这个工作时,我会试试你的代码
【解决方案3】:

我猜 listboxitem.ToString() 包含艺术家的名字。

然后:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 2014-08-15
    • 2013-05-21
    • 2017-12-08
    • 2012-08-12
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多