使用新的ID3标签保存MP3时出现问题

时间:2011-06-23 15:21:10

标签: c# io mp3 id3 id3lib

我正在使用他们的示例中的ID3lib和MP3Lib(http://id3lib.sourceforge.net/) 当我编辑我的MP3时,它有时会工作,有时则不然。然后我得到一个例外,即文件无法重写。这些文件未被使用。我认为,问题是,我通过库设置ID3v2标签,MP3可能只有ID3v1标头? 有没有人之前有这样的问题?

编辑: 我设法找到问题,每当我尝试保存相册的图片时就会发生这种情况。

string filepath = Application.StartupPath + @"\temp.jpg";
if(File.Exists(filepath))
    File.Delete(filepath);

FileStream fs = File.Create(filepath);
id3AlbumImage.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
fs.Close();

using (FileStream stream = File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    byte[] buffer = new Byte[stream.Length];
    stream.Read(buffer, 0, buffer.Length);
    if (buffer != null)
    {
        MemoryStream memoryStream = new MemoryStream(buffer, false);
        _mp3File.TagHandler.Picture = Image.FromStream(memoryStream);
    }
}

错误说: System.IO.IOException:要移动的文件无法覆盖要替换的文件。要替换的文件保留其原始名称。

   bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   bei System.IO.__Error.WinIOError()
   bei System.IO.File.Replace(String sourceFileName, String destinationFileName, String destinationBackupFileName, Boolean ignoreMetadataErrors)
   bei Com.Hertkorn.Helper.Filesystem.FileMover.FileMove(FileInfo sourceLocation, FileInfo targetLocation, FileInfo backupLocation) in E:\Projects\id3lib\Mp3Lib\Utils\FileMover.cs:Zeile 51.
   bei Mp3Lib.Mp3File.RewriteFile(FileInfo bakFileInfo) in E:\Projects\id3lib\Mp3Lib\MP3\Mp3File.cs:Zeile 346.
   bei Mp3Lib.Mp3File.Update() in E:\Projects\id3lib\Mp3Lib\MP3\Mp3File.cs:Zeile 231.

1 个答案:

答案 0 :(得分:0)

实际问题是NTFS。如果您重写ID3标签,则打开MP3本身。似乎这个开放过程偶尔会抛出一个错误。如上所述,它只是“有时”发生。 现在,我真的做了一个肮脏的解决方案,并尝试捕捉它,如果出现该错误,我只是重做相同。有趣的是,这项工作到目前为止。 我将这个答案标记为解决方案,即使它是一个肮脏的答案。如果有人知道更好的方法或解决方案,请告诉我们!