使用NAudio转换MP3为Wav时遇DirectoryNotFoundException错误求助
问题分析与解决
你遇到的DirectoryNotFoundException是因为目标路径里的文件夹不存在——Path.Combine只是把字符串拼接成路径格式,不会自动创建实际的文件夹目录,而WaveFileWriter.CreateWaveFile需要目标文件所在的文件夹已经存在才能写入文件。
解决方法
在生成输出文件路径后、写入文件前,先创建目标文件夹:
修改你的代码,在拼接出ParentSubFolder后,添加创建目录的代码:
const string ext = ".wav"; var dlg = new OpenFileDialog { Filter = Constants.FILEFILTER }; var res = dlg.ShowDialog(); if (res == true) { var AudioName = Path.GetFileNameWithoutExtension(dlg.FileName); var FoderParent = Path.Combine(DocumentsPath, Constants.TRANSCRIPTIONS); var ParentSubFolder = Path.Combine(FoderParent, Constants.AUDIO); // 关键:自动创建所有不存在的父目录 Directory.CreateDirectory(ParentSubFolder); var filename = Path.Combine(ParentSubFolder, $"{AudioName}{ext}"); using var mp3 = new Mp3FileReader(dlg.FileName); using var ws = WaveFormatConversionStream.CreatePcmStream(mp3); WaveFileWriter.CreateWaveFile(filename, ws); }
补充说明
Directory.CreateDirectory方法会自动创建路径中所有不存在的文件夹层级——不管是Transcriptions还是它下面的Audio,只要不存在都会被创建;如果文件夹已经存在,这个方法也不会报错,使用起来很安全。
内容的提问来源于stack exchange,提问作者edu
相关产品推荐
相关产品推荐

