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

问题描述 投票:1回答:2

使用该代码。

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

如果给你一个WAV文件,你就会抛出异常:

Not a WAVE file - no RIFF header Exception Details: System.FormatationException: System.FormatException.Not a WAVE file - no RIFF header: 不是一个WAVE文件--没有RIFF头。

它锁定了文件 audioFileLocation 以防止它被删除。

有什么方法可以在使用阅读器之前检查是否存在一个有效的RIFF头?

c# asp.net naudio
2个回答
2
投票

尝试使用一个流。

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

如果... 这个 是当前代码的 WaveFileReader 它使用的类 File.OpenRead(waveFile) 的 "字符串重载 "和 Stream 返回的内容似乎没有被封闭处理。也许已经是followin的工作了。

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

因为这应该会处理流。


0
投票

我有同样的代码,但是就在这段代码之前,我的FileWriter被处置了,它是写到了 audioFileLocation

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

一些运行代码的计算机太慢,无法重置到初始位置,导致在文件末尾搜索波头。解决方法是重新设置位置。

using (var reader = new WaveFileReader(audioFileLocation))
{
    reader.Position = 0;
    // Do something....
}
© www.soinside.com 2019 - 2024. All rights reserved.