Я заметил несколько странное поведение во время игры с некоторыми файлами MP3 под Windows 7 (32-разрядная версия), которую я недавно купил у Amazon. Они хранятся в сетевом ресурсе (Samba), и, по сути, при их воспроизведении, по-видимому, произошла значительная задержка. Я предполагал, так как я использовал свое собственное программное обеспечение здесь, что это было более чем вероятно, что я делал; однако задержка обостряется при фактическом вызове fopen
(расширяя это далее, это также происходит с диалоговым окном GetOpenFileName, после выбора файла возникает заметная пауза, прежде чем диалоговое окно закрывается и элемент управления возвращается в код). Это последнее поведение предполагает, что компилятор / цепочка инструментов здесь неактуальны, так как это собственный вызов Win32.
Быстрая трассировка Wireshark показывает, что вызов open (или GetOpenFileName) вызывает чтение всего файла. Проблема также возникает, если файл находится в другом окне Windows (так что здесь нет какой-то причуды Samba). Похоже, это связано с метаданными, прикрепленными к файлу; если я скину его, файл откроется почти мгновенно. Интересно, что в файле, в котором эта проблема не обнаружена, Wireshark показывает, что даже тогда Windows будет читать ~ 64 КБ в начале файла, а затем ~ 32 КБ в конце. Поскольку у вас могут быть теги ID3 как в начале, так и в конце файла, похоже, что Windows предварительно читает тег для своих собственных целей, и по какой-то причине теги в этих конкретных файлах заставляют его сканировать весь файл.
До сих пор мой поиск в Google привел меня к рассмотрению обработчиков свойств, и именно эта ссылка содержала много полезной информации по этому вопросу. Одна небольшая проблема - у меня нет никаких обработчиков свойств, определенных для .mp3, или любого другого аудиоконтента, в этом отношении, поэтому я немного затрудняюсь объяснить это поведение.
У меня была мысль, что, возможно, это был тег ID3v4, так как я, кажется, вспоминаю, что они (теоретически) могут быть разбросаны по всему файлу, что объясняет мысль о том, почему Windows будет читать весь файл. Это не так, это ID2v3.