我正在使用它们的示例的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:Projectsid3libMp3LibUtilsFileMover.cs:Zeile 51.
bei Mp3Lib.Mp3File.RewriteFile(FileInfo bakFileInfo) in E:Projectsid3libMp3LibMP3Mp3File.cs:Zeile 346.
bei Mp3Lib.Mp3File.Update() in E:Projectsid3libMp3LibMP3Mp3File.cs:Zeile 231.
实际问题是NTFS。如果你重写ID3标签,你就打开了MP3本身。这个打开过程似乎偶尔会抛出一个错误。正如所说,这种情况只是"有时"发生。现在,我真的做了肮脏的解决方案,并尝试绕过它,如果出现错误,我只是重做同样的解决方案。有趣的是,到目前为止,这是有效的。我会把这个答案标记为解决方案,即使它是一个肮脏的答案。如果有人知道更好的方法或解决方案,请告诉我们!