Visual Studio, игнорирующая файл

Visual Studios игнорирует файл, который я пытаюсь воспроизвести. С этим кодом он возвращает false, так как не загружает файл.

    result = LoadWaveFile("../Engine/data/sound01.wav", &m_secondaryBuffer1);
if (!result)
{
    return false;
}

1 ответ

Не используйте относительный путь в текущем рабочем каталоге. Построить вместо этого абсолютный путь, объединяя GetModuleFileName и ваш первоначальный относительный путь. Текущий рабочий каталог ненадежен и не должен использоваться.

РЕДАКТИРОВАТЬ: Что не так с текущими каталогами? Короче говоря, это изменчиво. Во-первых, процесс может не запуститься в ожидаемой директории (как это было в вашем случае). Пользователь может создать ярлык для приложения и указать любой начальный каталог там. Во-вторых, в Windows API есть функции (особенно GetOpenFileName), который может изменить текущий каталог как побочный эффект. В-третьих, какая-то третья часть библиотеки, используемая приложением, может изменить текущий каталог. В-четвертых, текущий каталог уникален в процессе, разделяется между потоками, поэтому даже если вы вызываете SetCurrentDirectory прежде чем полагаться на это, какой-то другой поток может изменить его в это время.

В небольшом демонстрационном приложении все эти причины практически не существуют, и вы можете даже предотвратить первую причину, установив для параметра Project > Свойства> Свойства конфигурации> Отладка> Рабочий каталог значение $(OutDir), если вы когда-либо собираетесь запустить приложение из отладчика. Это очень специфический вариант использования, поэтому я бы остановился на более надежном решении, которое не зависит от изменчивой природы текущего каталога.

Другие вопросы по тегам