Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
18.3. Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?
В: Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?
О:
К сожалению, в QSP нет специальной функции, позволяющей проверять наличие файлов в папках. Если файл отсутствует, плеер, в зависимости от типа файла, либо проигнорирует его отсутствие, либо покажет на экране ошибку.
Например, если плеер не найдёт файл музыки, он просто проигнорирует команду `play`. Если плеер не найдёт файл изображения, на экран будет выведена "битая картинка". Если плеер не найдёт файл модуля, он выведет ошибку 104: "указанный файл недоступен или не найден!".
Определённо можно проверить наличие звукового файла, если сразу после запуска мелодии воспользоваться функцией `isplay`:
if isplay('audio/coolmusic.mp3')=-1:
'Файл существует'
else
'Файл не существует'
end
Поскольку воспроизведение отсутствующих звуковых файлов не вызывает ошибки, а команда попросту игнорируется плеером, мы можем использовать этот способ для определения наличия других файлов. Да, это будет костыль, но если вы боитесь забыть, скинули вы в папку нужный файл или нет, способ вам подойдёт.
Смысл в чём.
Параллельно определённому файлу храним звуковой файл без звука длительностью 1 секунда хотя бы. Этот файл у нас имеет точно то же название, что и файл, наличие которого мы хотим проверить. Сама проверка выглядит следующим образом: запускаем звуковой файл и проверяем его воспроизведение через `isplay`. Если файл отсутствует, то он просто не будет воспроизводиться и `isplay` выдаст 0. Из чего мы твёрдо делаем вывод, что и нужного нам файла нет.
play 'img/picture_000345.MP3'
if isplay('img/picture_000345.MP3')=-1:
'<img src="img/picture_000345.PNG">'
else
'Художник забыл нарисовать картинку.'
end
Так же вы можете организовать генерацию модуля со списком файлов в указанной папке. Вот метод, предложенный `evp`:
Некий исполняемый файл (это может быть даже bat-файл):
- составляет список файлов в указанной папке/папках;
- сохраняет результаты своей работы в текстовый документ, используя синтаксис txt2gam для формирования нужных переменных или массивов;
- конвертирует этот файл в .qsp, используя txt2gam.exe;
- запускает игру.
В самой игре используется функция `INCLIB` для присоединения получившегося модуля.
Если вы используете JAD_QBST, у вас есть возможность прописать в файле проекта специальный параметр "scans", и тогда локация для проверки существования файла будет генерироваться автоматически на основе содержимого указанной папки.