| / | Форум |
|
mandor
07.07.2006 15:02
Это более корректная версия чтения файла из любой папки, а не
из "песочницы". Отличие с предыдущей редакцией в функции ReadFile. Для операций чтения и записи используются внешние функции
системной библиотеки kernel.dll. Содержимое файла C:\Text.txt сохраняется в строке. Содержимое этой строки записывается в
файл C:\Text2.txt.
// File Read Write.mq4 // Скрипт. Положить в папку experts\scripts #property copyright "mandorr@gmail.com" #include <WinUser32.mqh> #import "kernel32.dll" int _lopen (string path, int of); int _lcreat (string path, int attrib); int _llseek (int handle, int offset, int origin); int _lread (int handle, int& buffer[], int bytes); int _lwrite (int handle, string buffer, int bytes); int _lclose (int handle); #import void start() { string text=ReadFile("C:\Text.txt"); WriteFile("C:\Text2.txt",text); int count=StringLen(text); string title="Чтение из файла"; string msg="Число считанных байт: "+count+" \n" +"Cодержимое файла:\n\n"+text; MessageBox(msg,title,MB_OK|MB_ICONINFORMATION); } string ReadFile (string path) { int buffer[], count, handle, i, result; string text=""; handle=_lopen (path,0); if(handle<0) { Print("Ошибка открытия файла ",path); return (""); } count =_llseek (handle,0,2); if(count<0) { Print("Ошибка установки указателя" ); return (""); } ArrayResize(buffer,1+count/4); result=_llseek (handle,0,0); if(result<0) { Print("Ошибка установки указателя" ); return (""); } result=_lread (handle,buffer,count); if(result<0) { Print("Ошибка чтения файла " ,path); return (""); } result=_lclose (handle); if(result<0) { Print("Ошибка закрытия файла ",path); return (""); } for(i=0; i<ArraySize(buffer); i++) { text=text +CharToStr(buffer[i] & 0x000000FF) +CharToStr(buffer[i]>> 8 & 0x000000FF) +CharToStr(buffer[i]>>16 & 0x000000FF) +CharToStr(buffer[i]>>24 & 0x000000FF); } text=StringSubstr(text,0,count); return (text); } void WriteFile (string path, string buffer) { int handle, result, count=StringLen (buffer); handle=_lopen (path,1); if(handle<0) { handle=_lcreat (path,0); if(handle<0) { Print ("Ошибка создания файла ",path); return; } result=_lclose (handle); } handle=_lopen (path,1); if(handle<0) { Print("Ошибка открытия файла ",path); return; } result=_llseek (handle,0,0); if(result<0) { Print("Ошибка установки указателя" ); return; } result=_lwrite (handle,buffer,count); if(result<0) { Print("Ошибка записи в файл " ,path," ",count," байт"); } result=_lclose (handle); if(result<0) { Print ("Ошибка закрытия файла ",path); } } // End @ Херург |
|
Организуйте багтрекинг и техсаппорт для своей компании В TeamWox имеются все для того чтобы организовать багтрекинг. Интегрировав модуль Сервисдеск с веб-сайтом, Вы сможете получать заявки своих клиентов напрямую в TeamWox. Более того, вся переписка с клиентами автоматически распознается и попадает в архив, где ее без труда можно найти в будущем. |
|
mandor
09.07.2006 06:32
Поскольку в MQL4 нет типа данных, соответствующих типу символа - целого числа
длинной 1 байт, то по ссылке передается адрес массива целых чисел.
Содержимое файла целиком считывается в массив целых чисел.
Целое число в MQL4 имеет размер 4 байта. Поэтому после заполнения каждый элемент
массива содержит 4 кода символа. Символы извлекаются из массива
с помощью побитовых операций и использования функции CharToStr.
@ Херург |
|
Lisk
08.06.2008 06:35
Подскажите, пожалуйста. Имеем файл вне "песочницы". Как, не открывая(_lopen()) файл, узнать, что файл был изменен? |
33759 |
Rosh
08.06.2008 10:54
Смотрите пример
Get File Modification Time?
|
|
Inc
12.09.2008 11:57
Прошу помочь с такой ситуацией. |
|
KimIV
12.09.2008 12:23
Inc писал (а) >>
Прошу помочь с такой ситуацией. _lcreat() |
|
Graalforex
01.06.2009 11:20
Не работает. Пишет ошибку "dill calls are not allowed; 'kernel32.dll'-'_lopen' как указано файл поместил в раздел скриптов, прокомпилировал. Перетаскиваю скрипт на график, и ничего не происходит. |
|
komposter
01.06.2009 18:45
Graalforex >>:
Не работает. Пишет ошибку "dill calls are not allowed; 'kernel32.dll'-'_lopen' как указано файл поместил в раздел скриптов, прокомпилировал. Перетаскиваю скрипт на график, и ничего не происходит. http://www.mql4.com/ru/search/dll%20calls%20are%20not%20allowed |
|
Graalforex
01.06.2009 22:25
Разобрался, оказывается вот что надо было сделать : Советники --> Свойства --> Общие --> Разрешить импорт функций из DLL |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий