4

我编写了一个程序,它应该读出 mp3 文件的 id3 标签,创建一个以艺术家命名的目录,然后我想将 mp3 文件移动到特定的艺术家目录中。

当我试图移动 Mp3 文件时,它不会将它移动到我创建的音乐目录的子文件夹(命名为艺术家)中。我只想移动 Mp3 文件,而不是重命名它们。

这是我的代码:

   public void moveFiles(string path, string[] title, string[] artist,string [] songs)
    {//loop through the title array
        for(int i=0;i<title.Length;i++)
        {// no artist no name
            if (artist[i] == null)
            { 
                i += 1;
            }//check if sourceFile is existing
            if (File.Exists(songs[i]))
            {//check if destinationFile is existing
                if (File.Exists((@"C:\Musik\" + artist[i] + songs[i])))
                {//if delete
                    File.Delete((@"C:\Musik\" + artist[i] + songs[i]));
                } 
                else
                { //move file from songs[i](sourcePath)to (destinationPath)
                    File.Move(songs[i],(@"C:\Musik\" + artist[i] + songs[i]));                  
                    MessageBox.Show("Das Lied " + title[i] + " wurde erfolgreich verschoben");
                }
            }
            else
            {
                MessageBox.Show(songs[i]+" does not exist!");
            }
        }
    }

它只会将我的文件移动到 C:\Musik 目录中,并且它会将我的文件重命名为 Artist-Song;欢迎任何帮助。谢谢:)

4

3 回答 3

8

您在路径中错过了反斜杠。我强烈建议也使用Path.Combine这种类型的东西。它使它更具可读性,并且比纯字符串连接更简洁。也Path.GetFileName()超级有用……知道/喜欢它;)

File.Move(songs[i], Path.Combine(@"C:\Musik", Path.Combine(artist[i], Path.GetFileName(songs[i]));

更新

如果您的目标是 .Net 4.0 或更高版本,您可以使用 4 字符串覆盖来使其更清晰(如建议中所指出的那样)。如果您的目标是 3.5 或更低,请使用顶级解决方案。

File.Move(songs[i], Path.Combine(@"C:", "Musik", artist[i], Path.GetFileName(songs[i]));
于 2014-05-08T13:42:47.773 回答
2

您在代码中遗漏了一个反斜杠 ("\")。

// By popular suggestion, using Path.Combine...
const string dstRootDirectoryName = @"C:\Musik";
var destinationFileName = Path.Combine(dstRootDirectoryName, artist[i], songs[i]);
if (File.Exists(destinationFileName)
{
    File.Delete(destinationFileName);
}
else
{
    File.Move(songs[i], destinationFileName);
    MessageBox.Show("The file:" + title[i] + " was moved");
}
于 2014-05-08T13:41:13.217 回答
0
File.Move(songs[i],(@"C:\Musik\" + artist[i] + songs[i]));

在文件夹之间添加斜线:

File.Move(songs[i],String.Format("C:\Musik\{0}/{1}", artist[i], songs[i]));

此外,考虑使用 String.Format 而不是通常的字符串连接,它看起来更易读 IMO。

于 2014-05-08T13:42:39.873 回答