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

Posted

技术标签:

【中文标题】使用新 ID3 标签保存 MP3 时出现问题【英文标题】:Problem saving a MP3 with new ID3 Tags 【发布时间】:2011-06-23 15:21:09 【问题描述】:

我正在使用他们示例的 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】:

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

【讨论】:

以上是关于使用新 ID3 标签保存 MP3 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

通过javascript从文件夹中的mp3文件中读取id3标签

使用 taglib# 提取 mp3 标签

在 iOS 上保存 ID3 标签

使用 id3v2 获取 MP3 ID3 (V2) 标签

使用 Java ID3 标签库从 MP3 文件中获取图像

MP3 ID3 元数据没有“标签”标签?