写过跟单的朋友都了解这块,就是通过调用Windows API,进行文件的读写。
当然,这个功能不仅限于写跟单EA,今天我把这个主要的函数分享出来,有兴趣的可以自行研究。
1. 导入Windows API函数
- #import “kernel32.dll”
 int CreateDirectoryW(string directoryName,int type);
 int CreateFileW(string Filename, int AccessMode, int ShareMode, int PassAsZero, int CreationMode, int FlagsAndAttributes, int AlsoPassAsZero);
 int WriteFile(int FileHandle, string BufferPtr, int BufferLength, int &BytesWritten[], int PassAsZero);
 int ReadFile(int FileHandle, uchar &Buffer[], int BufferLength, int & BytesRead[], int PassAsZero);
 int CloseHandle(int FileHandle);
 int GetFileSize(int FileHandle, int PassAsZero);
 #import
这段代码导入了Windows kernel32.dll库中的文件操作相关函数。具体来说,导入的函数包括:
- CreateDirectoryW:用于创建目录。
- CreateFileW:用于打开文件。
- WriteFile:用于向文件写入数据。
- ReadFile:用于从文件读取数据。
- CloseHandle:关闭文件句柄。
- GetFileSize:获取文件大小。
2. 读文件操作(ReadFile)
- string ReadFile(string Filename)
 {
 string strFileContents = “”;
 int h = CreateFileW(Filename, 0x80000000 /*GENERIC_READ*/, 3 /*SHARE READ|WRITE*/, 0, 3 /*OPEN_EXISTING*/, 0, 0);
 if (h == -1) {
 // Open failed
 } else {
 int sz = GetFileSize(h, 0);
 if (sz > 0) {
 uchar buffer[];
 ArrayResize(buffer, sz);
 int read[1];
 ReadFile(h, buffer, sz, read, 0);
 if (read[0] == sz)
 strFileContents = CharArrayToString(buffer, 0, read[0]);
 }
 }
 CloseHandle(h);
 return strFileContents;
 }
这段代码用于从指定的文件中读取内容:
- CreateFileW:打开指定文件,设置文件访问模式为读取。
- GetFileSize:获取文件的大小。
- ReadFile:读取文件内容到一个缓冲区中。
- CharArrayToString:将读取到的字节数组转换为字符串。
- CloseHandle:关闭文件句柄。
3. 写文件操作(WriteFile)
- void WriteFile(string filePath,string str)
 {
 int BytesWritten[1] = {0};
 uchar WriteBuffer[];
 StringToCharArray(str, WriteBuffer);
 int FileHandle = CreateFileW(FileName, 1073741824, 3, 0, 2, 0, 0);
 WriteFile(FileHandle,WriteBuffer,StringLen(str),BytesWritten,0);
 CloseHandle(FileHandle);
 }
这段代码用于向指定的文件写入内容:
- StringToCharArray:将字符串转换为字符数组,以便写入文件。
- CreateFileW:打开或创建文件,设置文件访问模式为写入。
- WriteFile:将缓冲区内容写入文件。
- CloseHandle:关闭文件句柄。
读文件:通过调用ReadFile函数,MT4可以从本地文件中读取内容,返回文件的内容作为字符串。
写文件:通过调用WriteFile函数,MT4可以将数据(字符串)写入指定的文件。








