Я использую fPointInput = fopen(fileName, "r");
, пытаясь получить доступ к блоку данных в файле .WAV, но никогда не получая приемлемых результатов. (Массив данных заполняется в основном нулями, за исключением первых нескольких сотен индексов). Может ли это быть вызвано использованием неточного режима открытия?Какой режим fopen() следует использовать при работе с WAV-файлом?
1
A
ответ
3
Этот article указывает, что с использованием rb
хорошо работает. Обратите внимание, что в этом ответе ничего нет Windows
. Только стандарт C
IO.
+0
Unix не различает «текстовые» и «двоичные» файлы. Поэтому 'b' ничего не делает. Однако, чтобы сделать свою кросс-платформу, вы должны использовать 'b' там, где это необходимо. Этот код использует буферы 1K для получения текущего рабочего каталога и имени файла. Вместо этого следует использовать 'MAXPATHLEN' из' sys/param.h'. Но, по крайней мере, он защищает себя от переполнения буфера. – Schwern
Возможно, вы захотите открыть его с помощью 'rb', так как это двоичный файл. Вы можете использовать 'rb +', если вы хотите получить сообщение об ошибке при открытии файла. – tversteeg
В какой операционной системе вы работаете? Двоичный или текстовый режим действительно имеет значение для Windows. И вы могли бы показать код, который используете для чтения 'fPointInput'? – Schwern
@tversteeg 'rb +' не относится к обработке ошибок. 'rb +' откроет его для чтения и записи, чего они, вероятно, не хотят делать. – Schwern