`不是WAVE文件 - 没有RIFF头`锁定文件

时间:2014-07-18 11:30:57

标签: c# asp.net naudio

使用代码:

using (var reader = new WaveFileReader(audioFileLocation))
{
    // Do something....
}

如果给出了抛出异常的wav文件:

  

不是WAVE文件 - 没有RIFF标题
  异常详细信息:System.FormatException:不是WAVE文件 - 没有RIFF标题

它锁定文件audioFileLocation,阻止其被删除。

在使用阅读器之前,有没有办法检查是否存在有效的RIFF标题?

2 个答案:

答案 0 :(得分:2)

尝试使用流:

using(var inputStream = new FileStream(audioFileLocation, FileMode.Open, 
                           FileAccess.Write, FileShare.ReadWrite))
{
    using (var reader = new WaveFileReader(inputStream))
    {
        // Do something....
    }
}

如果THISWaveFileReader类的当前代码,它在consturctor的“字符串重载”中使用File.OpenRead(waveFile)并且返回的Stream似乎不会被关闭/设置。也许已经有以下作品:

using(var inputStream = File.OpenRead(audioFileLocation))
{
    using (var reader = new WaveFileReader(inputStream))
    {
        // Do something....
    }
}

因为这应该处理流。

答案 1 :(得分:0)

我有相同的代码,但是在我将FileWriter处理掉之前,它正在写入audioFileLocation

fileWriter.Dispose; // writes to audioFileLocation
// ...
using (var reader = new WaveFileReader(audioFileLocation))
{
    // Do something....
}

某些运行该代码的计算机由于太慢而无法重置到初始位置,结果是在文件末尾搜索了wave头。解决方法是重置位置:

using (var reader = new WaveFileReader(audioFileLocation))
{
    reader.Position = 0;
    // Do something....
}