我有一个小型的控制台应用程序,它可以浏览一组文件夹,并尝试设置ID3Tag属性。
ScrPathn相册和艺术家是字符串常量。
static void Main(string[] args)
{
List<string> dirs = new List<string>(Directory.EnumerateDirectories(SrcPath));
foreach (var dir in dirs)
{
string ParentDirOfFile = dir.Substring(dir.LastIndexOf("\\") + 1);
List<string> files = new List<string>(Directory.EnumerateFiles(dir));
foreach (var file in files)
{
string filename = Path.GetFileName(file);
string destfile = Path.Combine(SrcPath, ParentDirOfFile + "_" + filename);
var fs = new FileStream(destfile, FileMode.Open);
using (var tagFile = TL.File.Create(new TL.StreamFileAbstraction(destfile, fs, fs)))
{
tagFile.Tag.Album = Album;
tagFile.Tag.Title = Path.GetFileNameWithoutExtension(destfile);
tagFile.Tag.AlbumArtists = new string[] { Artist };
tagFile.Save();
}
}
}
Console.ReadLine();
}在保存步骤中,我得到:
System.StackOverflowException是未处理的消息: mscorlib.dll中出现类型为'System.StackOverflowException‘的未经处理的异常
我使用的是通过NuGet安装的TagLig的最新版本。有什么建议吗?
编辑。VS没有给出额外的信息。
更改代码以拆分读写流。
var readfs = new FileStream(destfile, FileMode.Open);
var writefs = new FileStream(Path.Combine(SrcPath, "_" + ParentDirOfFile + "_" + filename), FileMode.Create);
using (var tagFile = TL.File.Create(new TL.StreamFileAbstraction(destfile, readfs, writefs)))同样的错误,会创建一个空的新文件。
发布于 2015-02-12 05:47:25
我不能说我完全理解你的代码,但我知道这个更简单的版本确实可以工作:
using (var tagFile = TagLib.File.Create(destfile))
{
tagFile.Tag.Album = Album;
tagFile.Tag.Title = Path.GetFileNameWithoutExtension(destfile);
tagFile.Tag.AlbumArtists = new string[] { Artist };
tagFile.Save();
}https://stackoverflow.com/questions/28438991
复制相似问题