Спасибо за сообщение, исправлено.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Экспериментирую с работой файловых функций.
Компилятор зависает (входит в бесконечный цикл) при компилировании этого кода.
Конечно в коде есть ошибки. Забыл удалить из кода функцию AnsiToUnicode, начал компиляцию и все зависло.
//+------------------------------------------------------------------+
//| FileTest.mq5 |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
#property version "1.00"
#import "ntdll.dll"
int RtlGetLastWin32Error();
int RtlSetLastWin32Error (int dwErrCode);
#import
//==== Константы для функции "CreateFile()". ===============================================================================================================================================================
// ---- Параметр "dwDesiredAccess". ------------------------------------------------------------------------------------------------------------------------
//#define GENERIC_EXECUTE // Общий доступ к файлу.
#define GENERIC_WRITE 0x40000000 // Доступ к файлу для записи.
#define GENERIC_READ 0x80000000 // Доступ к файлу для чтения.
// ---- Дополнительные атрибуты для параметра "dwDesiredAccess". -------------------------------------------------------------------------------------------
#define FILE_ADD_FILE 0x0002 // Для директория, право создавать файл в директории.
#define FILE_ADD_SUBDIRECTORY 0x0004 // Для директория, право создавать subdirectory.
//#define FILE_ALL_ACCESS // Все возможные права доступа для файла.
#define FILE_APPEND_DATA 0x0004 // Для файлового объекта, право добавлять данные в файл.
#define FILE_CREATE_PIPE_INSTANCE 0x0004 // Для поименованной трубы, право создавать трубу.
#define FILE_DELETE_CHILD 0x0040 // Для директория, право удалять директорий и все файлы, которые он содержит, включая только для чтения файлы.
#define FILE_EXECUTE 0x0020 // Для исконного кодового файла, право выполнять файл. Это право доступа данное сценариям может заставить сценарий, чтобы быть программой, в зависимости от переводчика сценария.
#define FILE_LIST_DIRECTORY 0x0001 // Для директория, право указывать содержание директория.
#define FILE_READ_ATTRIBUTES 0x0080 // Право читать атрибуты файла.
#define FILE_READ_DATA 0x0001 // Для файлового объекта, право читать соответствующие файловые данные. Для объекта директория, право читать соответствующие данные директория.
#define FILE_READ_EA 0x0008 // Право читать расширенные атрибуты файла.
#define FILE_TRAVERSE 0x0020 // Для директория, право просматривать директорий. По умолчанию, пользователи назначены привилегия BYPASS_TRAVERSE_CHECKING, которая игнорирует право доступа FILE_TRAVERSE.
#define FILE_WRITE_ATTRIBUTES 0x0100 // Право записывать атрибуты файла.
#define FILE_WRITE_DATA 0x0002 // Для файлового объекта, право записывать данные в файл. Для объекта директория, право создавать файл в директории (FILE_ADD_FILE).
#define FILE_WRITE_EA 0x0010 // Право записывать расширенные атрибуты файла.
//#define STANDARD_RIGHTS_READ // Включает READ_CONTROL, который - право читать информации в файле или дескрипторе объектной безопасности директория. Это не включает информацию в SACL.
//#define STANDARD_RIGHTS_WRITE // Также, как STANDARD_RIGHTS_READ.
//#define SYNCHRONIZE // Право определять файловый указатель в одной из функций ожидания.
// ---- Параметр "dwShareMode". ----------------------------------------------------------------------------------------------------------------------------
#define FILE_SHARE_NO 0x00000000 // Запрещает процессы открытия файла.
#define _FILE_SHARE_READ 0x00000001 // Подготавливает работу без ограничений в файле или устройстве для чтения.
#define _FILE_SHARE_WRITE 0x00000002 // Подготавливает работу без ограничений в файле или устройстве для записи.
#define FILE_SHARE_DELETE 0x00000004 // Подготавливает работу без ограничений в файле или устройстве для удаления.
// ---- Параметр "dwCreationDisposition".-------------------------------------------------------------------------------------------------------------------
#define CREATE_NEW 1 // Создает новый файл, если его ещё нет.
#define CREATE_ALWAYS 2 // Создает новый файл, всегда.
#define OPEN_EXISTING 3 // Открывает файл или устройство, если он существует.
#define OPEN_ALWAYS 4 // Открывает файл, всегда.
#define TRUNCATE_EXISTING 5 // Открывает файл и исключает это чтобы размер - нулевые байты, только если он существует.
// ---- Параметр "dwFlagsAndAttributes". -------------------------------------------------------------------------------------------------------------------
// ---- Атрибут. -------------------------------------------------------------------------------------------------------------------------------------------
#define FILE_ATTRIBUTE_READONLY 0x1 // (1) Файл читается только. Приложения могут прочитать файл, но не могут записаться на или удалять это.
#define FILE_ATTRIBUTE_HIDDEN 0x2 // (2) Файл исчезнут. Не включайте это в обычном листинге директория.
#define FILE_ATTRIBUTE_SYSTEM 0x4 // (4) Файл является частью или использованное исключительно операционной системой.
#define FILE_ATTRIBUTE_ARCHIVE 0x20 // (32) Файл должен быть архивизирован. Приложения используют этот атрибут, чтобы выделять файлам для копии или удаления.
#define FILE_ATTRIBUTE_NORMAL 0x80 // (128) Файл нет был установлен другие атрибуты. Этот атрибут - в силе только если использовано только.
#define FILE_ATTRIBUTE_TEMPORARY 0x100 // (256) Файл используется для временной памяти.
#define FILE_ATTRIBUTE_OFFLINE 0x1000 // (4096) Данные файла не немедленно доступно. Этот атрибут указывает, что файловые данные физически перемещены на offline память.
#define FILE_ATTRIBUTE_ENCRYPTED 0x4000 //(16384) Файл или директорий закодированы.
// ---- Флаг. ----------------------------------------------------------------------------------------------------------------------------------------------
#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000 // Файл открывается или создается для резервного или действия восстановления.
#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000 // Файл должен немедленно удаляться после закрытия.
#define FILE_FLAG_NO_BUFFERING 0x20000000 // Файл или устройство открывается без системы, кешировавшейся для данных читает и записывает.
#define FILE_FLAG_OPEN_NO_RECALL 0x00100000 // Файловые данные требуется, но это должно оставаться расположен в дистанционной памяти.
#define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000 // Нормально reparse точку обрабатывая не произойдет; CreateFile ПОПЫТАЕТСЯ открывать reparse точку.
#define FILE_FLAG_OVERLAPPED 0x40000000 // Файл или устройство открывается или создается для асинхронного В/В.
#define FILE_FLAG_POSIX_SEMANTICS 0x0100000 // Доступ произойдет согласно правила POSIX.
#define FILE_FLAG_RANDOM_ACCESS 0x10000000 // Доступ собирается быть произвольным. Система может использовать это как намек, чтобы оптимизировать файловое кэширование.
#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000 // Доступ собирается быть последовательным из начала, чтобы заканчиваться. Система может использовать это как намек, чтобы оптимизировать файловое кэширование.
#define FILE_FLAG_WRITE_THROUGH 0x80000000 // Операции Записи не пройдет через любой промежуточный кеш, они пойдут непосредственно на диск.
//==== Константы для функции "CreateFileMappingA()". =======================================================================================================================================================
#define PAGE_EXECUTE 0x10 // Включает исполнительный доступ к фиксированной области страниц. Результатом попытки прочитать или записать в фиксированную область является нарушение доступа.
#define PAGE_EXECUTE_READ 0x20 // Включает доступ исполнительный/чтения к фиксированной области страниц. Результатом попытки записать в фиксированную область является нарушение доступа.
#define PAGE_EXECUTE_READWRITE 0x40 // Включает исполнительный/чтения/записи доступ к фиксированной области страниц.
#define PAGE_EXECUTE_WRITECOPY 0x80 // Включает доступ исполнительный/чтения/записи к фиксированной области image файла кодовых страниц. Страницы распределяют “чтение при записи”(read-on-write)
// и “копирование при записи”(copy-on-write).
#define PAGE_NOACCESS 0x01 // Выключает все доступы к фиксированной области страниц. Результатом попытки прочитать из, записать в, или исполнить фиксированную область является
// исключение нарушения доступа, называемое ошибка общей защиты (GP).
#define PAGE_READONLY 0x02 // Включает доступ чтения к фиксированной области страниц. Результатом попытки записать в фиксированную область является нарушение доступа. Если система
// различается между доступом “только для чтения” и исполнением, то попытка исполнить код в фиксированной области приведет к нарушению доступа.
#define PAGE_READWRITE 0x04 // Включает доступ чтения/записи к фиксированной области страниц.
#define PAGE_WRITECOPY 0x08 // Дает копирование при записи(copy-on-write) защиту для фиксированной области страниц.
#import "kernel32.dll"
bool DeleteFileA(string PathName);
int CreateFileA(string lpFileName,int dwDesiredAccess,int dwShareMode,int lpSecurityAttributes,int dwCreationDisposition,int dwFlagsAndAttributes,int hTemplateFile);
bool ReadFile(int hFile,string &lpBuffer,int nNumberOfBytesToRead,int &lpNumberOfBytesRead[],int lpOverlapped);
bool WriteFile(int hFile,string lpBuffer,int nNumberOfBytesToWrite,int &lpNumberOfBytesWritten[],int lpOverlapped);
bool MoveFileExW(string &lpExistingFileName,string &lpNewFileName,int dwFlags);
bool CopyFileW(string &lpExistingFileName,string &lpNewFileName,bool bFailIfExists);
int _lopen(string PathName,int ReadWrite);
int _lcreat(string PathName,int Attribute);
int _llseek(int FileHandle,int Offset,int Origin);
int _lread(int FileHandle,string Buffer,int Bytes);
int _lwrite(int FileHandle,string Buffer,int Bytes);
int _lclose(int FileHandle);
#import
void OnStart()
{
int Handle;
string PathName = "C:\!NewFile.txt";
uchar PathNameA[];
StringToCharArray(PathName, PathNameA);
Handle = _lcreat(PathNameA, 0);
Print("_lcreat PathName=", PathName, " Create result = ", Handle, ", GetLastError()=", RtlGetLastWin32Error());
_lwrite(Handle, PathName, StringLen(PathName));
_lclose(Handle);
Handle = CreateFileW(PathName, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
Print("PathName=", PathName, " Create result = ", Handle, ", GetLastError()=", RtlGetLastWin32Error());
}
string AnsiToUnicode(uchar& Buff)
{}
// translate ANSI to UNICODE
ushort chW; uchar chA; string rez;
for(int i=0; i<StringLen(clip); i++)
{
chW=StringGetCharacter(clip, i);
chA=uchar(chW&255); rez=rez+CharToString(chA);
chA=uchar(chW>>8&255); rez=rez+CharToString(chA);
}
return(rez);
}
Кстати, только потом нашел функцию для конвертирования строк из Unicode в ANSI и обратно. Хорошо бы об этих функциях написать в Справке в разделе String.