Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

18.3. Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?

В: Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?

О:

К сожалению, в QSP нет специальной функции, позволяющей проверять наличие файлов в папках. Если файл отсутствует, плеер, в зависимости от типа файла, либо проигнорирует его отсутствие, либо покажет на экране ошибку.

Например, если плеер не найдёт файл музыки, он просто проигнорирует команду `play`. Если плеер не найдёт файл изображения, на экран будет выведена "битая картинка". Если плеер не найдёт файл модуля, он выведет ошибку 104: "указанный файл недоступен или не найден!".

Определённо можно проверить наличие звукового файла, если сразу после запуска мелодии воспользоваться функцией `isplay`:

play 'audio/coolmusic.mp3'
if isplay('audio/coolmusic.mp3')=-1:
    'Файл существует'
else
    'Файл не существует'
end

Поскольку воспроизведение отсутствующих звуковых файлов не вызывает ошибки, а команда попросту игнорируется плеером, мы можем использовать этот способ для определения наличия других файлов. Да, это будет костыль, но если вы боитесь забыть, скинули вы в папку нужный файл или нет, способ вам подойдёт.

Смысл в чём.

Параллельно определённому файлу храним звуковой файл без звука длительностью 1 секунда хотя бы. Этот файл у нас имеет точно то же название, что и файл, наличие которого мы хотим проверить. Сама проверка выглядит следующим образом: запускаем звуковой файл и проверяем его воспроизведение через `isplay`. Если файл отсутствует, то он просто не будет воспроизводиться и `isplay` выдаст 0. Из чего мы твёрдо делаем вывод, что и нужного нам файла нет.

usehtml=1
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", и тогда локация для проверки существования файла будет генерироваться автоматически на основе содержимого указанной папки.