4

MP3ファイルのid3タグを読み取り、アーティストのような名前のディレクトリを作成してから、mp3ファイルを特定のアーティストディレクトリに移動するプログラムをコーディングしています。

MP3 ファイルを移動しようとすると、作成した Musik ディレクトリのサブフォルダー (アーティストのような名前) に移動しません。名前を変更するのではなく、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

コードにバックスラッシュ ("\") が 1 つありません。

// 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 に答える