Hi,
I am trying to get the list of files in a nonMT4-Folder for which I need Windows' kernel32.dll functions.
Well there is an old thread to start: https://www.mql5.com/en/forum/103578 and https://www.mql5.com/de/articles/1543 for pre b600+
I just tried to change what has to be changed and replaced the buffer-function by the build-in-functions, but I still don't get any name... :(
As I want to make the experiments easy for those who want I set
#define TYP int
I changed and tried: uchar, char, short and int.
And I don't see any expert-name in the variable EAname.
Where am I mistaken?
I have been using WIN32_FIND_DATA structure in place of your TYP:
#define MAX_PATH 260 struct WIN32_FIND_DATA { DWORD dwFileAttributes; #ifdef IS_64_SYSTEM DWORD padding_1; #endif FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; };
So I would guess the cFileName is not located at index 0 through 79 of your (short or whatever) array, but somewhat further (probably index 22 through 281 of ushort array).
Thank you!!
This works:
//+------------------------------------------------------------------+
//| test_WinFindFileFirst.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
#define MAX_PATH 260
struct FILETIME
{
uint dwLowDateTime;
uint dwHighDateTime;
};
struct WIN32_FIND_DATA {
int dwFileAttributes; //DWORD dwFileAttributes;
#ifdef IS_64_SYSTEM
int padding_1; //DWORD padding_1;
#endif
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
uint nFileSizeHigh; //DWORD nFileSizeHigh;
uint nFileSizeLow; //DWORD nFileSizeLow;
uint dwReserved0; //DWORD dwReserved0;
uint dwReserved1; //DWORD dwReserved1;
short cFileName[MAX_PATH]; //TCHAR cFileName[MAX_PATH];
short cAlternateFileName[14]; //TCHAR cAlternateFileName[14];
};
#import "kernel32.dll"
int FindFirstFileW(string path, WIN32_FIND_DATA& answer[]);
bool FindNextFileW(int handle, WIN32_FIND_DATA& answer[]);
bool FindClose(int handle);
#import
void OnStart()
{
//---
WIN32_FIND_DATA W[1];
string myPath = TerminalPath() + "\\MQL4\\experts\\*.mq4"; //"Z:\\SlaveOrders\\*.txt";
int handle = FindFirstFileW( myPath,W);
FindClose(handle);
string n1 = ShortArrayToString(W[0].cFileName,0,WHOLE_ARRAY);
DebugBreak();
return;
}
//+------------------------------------------------------------------+
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi,
I am trying to get the list of files in a nonMT4-Folder for which I need Windows' kernel32.dll functions.
Well there is an old thread to start: https://www.mql5.com/en/forum/103578 and https://www.mql5.com/de/articles/1543 for pre b600+
I just tried to change what has to be changed and replaced the buffer-function by the build-in-functions, but I still don't get any name... :(
As I want to make the experiments easy for those who want I set
#define TYP int
I changed and tried: uchar, char, short and int.
And I don't see any expert-name in the variable EAname.
Where am I mistaken?