Как узнать существует ли звуковой файл (в папке Sounds)

 

Есть советник, который при определенных условиях подает звуковой сигнал. Вот функция:

void PlaySnd()
{
        string symbol = Symbol();
        PlaySound(symbol);
}

Т.е. если сигнал сработал на EURUSD, то проиграет файл EURUSD.wav, если на AUDUSD, то проиграет звуковой файл AUDUSD.wav. Мне нужно, чтобы если звукового файла не нашлось, то проиграл бы файл Signal.wav

что-то типа:

void PlaySnd()
{
        string symbol = Symbol();
         
        if (Узнаем существует ли файл "symbol.wav")
            PlaySound(symbol);
        else
            PlaySound("signal.wav");
}
Как узнать существование звукового файла?
 
kristopher:

Есть советник, который при определенных условиях подает звуковой сигнал. Вот функция:

Т.е. если сигнал сработал на EURUSD, то проиграет файл EURUSD.wav, если на AUDUSD, то проиграет звуковой файл AUDUSD.wav. Мне нужно, чтобы если звукового файла не нашлось, то проиграл бы файл Signal.wav

что-то типа:

Как узнать существование звукового файла?

проверять список файлов в папке со звуками )

стоит ли заморачиватся так ради звуков? )

 
sanyooooook:

проверять список файлов в папке со звуками )


как это сделать?
 
kristopher:

как это сделать?

тут можно почитать

Получение списка всех экспертов с исходным кодом

Простой скрипт для демонстрации возможностей описанных функций:

//+------------------------------------------------------------------+
//|                                                CheckFindFile.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
#property show_inputs
 
#import "kernel32.dll"
int  FindFirstFileA(string path, int& answer[]);
bool FindNextFileA(int handle, int& answer[]);
bool FindClose(int handle);
#import
 
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int win32_DATA[79];
   
   int handle = FindFirstFileA(TerminalPath() + "\experts\*.mq4",win32_DATA);
   Print(bufferToString(win32_DATA));
   ArrayInitialize(win32_DATA,0);
 
   while (FindNextFileA(handle,win32_DATA))
      {
      Print(bufferToString(win32_DATA));
      ArrayInitialize(win32_DATA,0);
      }
 
   if (handle>0) FindClose(handle);
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//|  считать текст из буфера                                         |
//+------------------------------------------------------------------+ 
string bufferToString(int buffer[])
   {
   string text="";
   
   int pos = 10;
   for (int i=0; i<64; i++)
      {
      pos++;
      int curr = buffer[pos];
      text = text + CharToStr(curr & 0x000000FF)
         +CharToStr(curr >> 8 & 0x000000FF)
         +CharToStr(curr >> 16 & 0x000000FF)
         +CharToStr(curr >> 24 & 0x000000FF);
      }
   return (text);
   }  
//+------------------------------------------------------------------+
 

спасибо. статья подсказала в какую сторону копать. вот функция FileExist:

#import "kernel32.dll"
int GetFileAttributesA(string filepath);
#import

bool FileExist(string path)
{
        int res = GetFileAttributesA(path);
        
        if (res == -1)
                return(false);
        else
                return(true);
}
 
kristopher:

спасибо. статья подсказала в какую сторону копать. вот функция FileExist:

Нестандартное решение. Почитал в МСДН... Ненадёжно выходит. Возможны проблемы. Вариант с перебором файлов и папок, как выложено выше, надёжнее.
 

Zhunko:
Нестандартное решение. Почитал в МСДН... Ненадёжно выходит. Возможны проблемы. Вариант с перебором файлов и папок, как выложено выше,

надёжнее.
#import "kernel32.dll"
int  FindFirstFileA(string filepath, int& answer[]);
bool FindClose(int handle);
#import

bool FileExist(string path)
{
        int win32_DATA[80];
        int handle = FindFirstFileA(path, win32_DATA);
        
        if (handle > 0)
        {
                FindClose(handle);
                return(true);
        }
        else
                return(false);
}
первый вариант был такой :)
 
kristopher:
первый вариант был такой :)
INVALID_HANDLE_VALUE = -1
        if (handle > 0)
        {
                FindClose(handle);
                return(true);
        }
        else
                return(false);
 
kristopher:

Есть советник, который при определенных условиях подает звуковой сигнал. Вот функция:

Т.е. если сигнал сработал на EURUSD, то проиграет файл EURUSD.wav, если на AUDUSD, то проиграет звуковой файл AUDUSD.wav. Мне нужно, чтобы если звукового файла не нашлось, то проиграл бы файл Signal.wav

что-то типа:

Как узнать существование звукового файла?

Да в этом случае останавливайте советник совсем, если кто-то законно использует Ваш советник, у него будет нужный .wav. А если нет - дополнительная защита Ваших авторских прав.
 
Zhunko:
Нестандартное решение. Почитал в МСДН... Ненадёжно выходит.
Это... Без воды давай, по делу. Что ненадежно? Чем нестандартно? Это наверное наиболее легкое из возможных решение.
Причина обращения: