146 lines
9.1 KiB
MQL5
146 lines
9.1 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| fileapi.mqh |
|
|
//| Copyright 2000-2025, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#include <WinAPI\windef.mqh>
|
|
|
|
//---
|
|
enum STREAM_INFO_LEVELS
|
|
{
|
|
FindStreamInfoStandard,
|
|
FindStreamInfoMaxInfoLevel
|
|
};
|
|
//---
|
|
struct BY_HANDLE_FILE_INFORMATION
|
|
{
|
|
uint dwFileAttributes;
|
|
FILETIME ftCreationTime;
|
|
FILETIME ftLastAccessTime;
|
|
FILETIME ftLastWriteTime;
|
|
uint dwVolumeSerialNumber;
|
|
uint nFileSizeHigh;
|
|
uint nFileSizeLow;
|
|
uint nNumberOfLinks;
|
|
uint nFileIndexHigh;
|
|
uint nFileIndexLow;
|
|
};
|
|
//---
|
|
struct CREATEFILE2_EXTENDED_PARAMETERS
|
|
{
|
|
uint dwSize;
|
|
uint dwFileAttributes;
|
|
uint dwFileFlags;
|
|
uint dwSecurityQosFlags;
|
|
PVOID lpSecurityAttributes;
|
|
HANDLE hTemplateFile;
|
|
};
|
|
//---
|
|
struct FILE_ATTRIBUTE_DATA
|
|
{
|
|
uint dwFileAttributes;
|
|
FILETIME ftCreationTime;
|
|
FILETIME ftLastAccessTime;
|
|
FILETIME ftLastWriteTime;
|
|
uint nFileSizeHigh;
|
|
uint nFileSizeLow;
|
|
};
|
|
//---
|
|
struct FIND_STREAM_DATA
|
|
{
|
|
long StreamSize;
|
|
short cStreamName[MAX_PATH+36];
|
|
};
|
|
//---
|
|
struct FIND_DATAW
|
|
{
|
|
uint dwFileAttributes;
|
|
FILETIME ftCreationTime;
|
|
FILETIME ftLastAccessTime;
|
|
FILETIME ftLastWriteTime;
|
|
uint nFileSizeHigh;
|
|
uint nFileSizeLow;
|
|
uint dwReserved0;
|
|
uint dwReserved1;
|
|
short cFileName[MAX_PATH];
|
|
short cAlternateFileName[14];
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
#import "kernel32.dll"
|
|
int AreFileApisANSI(void);
|
|
int CompareFileTime(FILETIME &file_time1,FILETIME &file_time2);
|
|
int CreateDirectoryW(const string path_name,PVOID security_attributes);
|
|
HANDLE CreateFile2(const string file_name,uint desired_access,uint share_mode,uint creation_disposition,CREATEFILE2_EXTENDED_PARAMETERS &create_ex_params);
|
|
HANDLE CreateFileW(const string file_name,uint desired_access,uint share_mode,PVOID security_attributes,uint creation_disposition,uint flags_and_attributes,HANDLE template_file);
|
|
int DefineDosDeviceW(uint flags,const string device_name,const string target_path);
|
|
int DeleteFileW(const string file_name);
|
|
int DeleteVolumeMountPointW(const string volume_mount_point);
|
|
int FileTimeToLocalFileTime(FILETIME &file_time,FILETIME &local_file_time);
|
|
int FindClose(HANDLE find_file);
|
|
int FindCloseChangeNotification(HANDLE change_handle);
|
|
HANDLE FindFirstChangeNotificationW(const string path_name,int watch_subtree,uint notify_filter);
|
|
HANDLE FindFirstFileExW(const string file_name,FINDEX_INFO_LEVELS info_level_id,FIND_DATAW &find_file_data,FINDEX_SEARCH_OPS search_op,PVOID search_filter,uint additional_flags);
|
|
HANDLE FindFirstFileNameW(const string file_name,uint flags,uint &StringLength,ushort &LinkName[]);
|
|
HANDLE FindFirstFileW(const string file_name,FIND_DATAW &find_file_data);
|
|
HANDLE FindFirstStreamW(const string file_name,STREAM_INFO_LEVELS InfoLevel,FIND_STREAM_DATA &find_stream_data,uint flags);
|
|
HANDLE FindFirstVolumeW(ushort &volume_name[],uint &buffer_length);
|
|
int FindNextChangeNotification(HANDLE change_handle);
|
|
int FindNextFileNameW(HANDLE find_stream,uint &StringLength,ushort &LinkName[]);
|
|
int FindNextFileW(HANDLE find_file,FIND_DATAW &find_file_data);
|
|
int FindNextStreamW(HANDLE find_stream,FIND_STREAM_DATA &find_stream_data);
|
|
int FindNextVolumeW(HANDLE find_volume,ushort &volume_name[],uint &buffer_length);
|
|
int FindVolumeClose(HANDLE find_volume);
|
|
int FlushFileBuffers(HANDLE file);
|
|
uint GetCompressedFileSizeW(const string file_name,uint &file_size_high);
|
|
int GetDiskFreeSpaceExW(const string directory_name,ulong &free_bytes_available_to_caller,ulong &total_number_of_bytes,ulong &total_number_of_free_bytes);
|
|
int GetDiskFreeSpaceW(const string root_path_name,uint §ors_per_cluster,uint &bytes_per_sector,uint &number_of_free_clusters,uint &total_number_of_clusters);
|
|
uint GetDriveTypeW(const string root_path_name);
|
|
int GetFileAttributesExW(const string file_name,GET_FILEEX_INFO_LEVELS info_level_id,FILE_ATTRIBUTE_DATA &file_information);
|
|
uint GetFileAttributesW(const string file_name);
|
|
int GetFileInformationByHandle(HANDLE file,BY_HANDLE_FILE_INFORMATION &file_information);
|
|
uint GetFileSize(HANDLE file,uint &file_size_high);
|
|
int GetFileSizeEx(HANDLE file,long &file_size);
|
|
int GetFileTime(HANDLE file,FILETIME &creation_time,FILETIME &last_access_time,FILETIME &last_write_time);
|
|
uint GetFileType(HANDLE file);
|
|
uint GetFinalPathNameByHandleW(HANDLE file,ushort &file_path[],uint file_path,uint flags);
|
|
uint GetFullPathNameW(const string file_name,uint buffer_length,ushort &buffer[],ushort &file_part[]);
|
|
uint GetLogicalDrives(void);
|
|
uint GetLogicalDriveStringsW(uint buffer_length,ushort &buffer[]);
|
|
uint GetLongPathNameW(const string short_path,string &long_path,uint buffer);
|
|
uint GetShortPathNameW(const string long_path,string &short_path,uint buffer);
|
|
uint GetTempFileNameW(const string path_name,const string prefix_string,uint unique,ushort &temp_file_name[]);
|
|
uint GetTempPathW(uint buffer_length,ushort &buffer[]);
|
|
int GetVolumeInformationByHandleW(HANDLE file,ushort &volume_name_buffer[],uint volume_name_size,uint &volume_serial_number,uint &maximum_component_length,uint &file_system_flags,ushort &file_system_name_buffer[],uint file_system_name_size);
|
|
int GetVolumeInformationW(const string root_path_name,ushort &volume_name_buffer[],uint volume_name_size,uint &volume_serial_number,uint &maximum_component_length,uint &file_system_flags,ushort &file_system_name_buffer[],uint file_system_name_size);
|
|
int GetVolumeNameForVolumeMountPointW(const string volume_mount_point,string volume_name,uint buffer_length);
|
|
int GetVolumePathNamesForVolumeNameW(const string volume_name,string volume_path_names,uint buffer_length,uint &return_length);
|
|
int GetVolumePathNameW(const string file_name,ushort &volume_path_name[],uint buffer_length);
|
|
int LocalFileTimeToFileTime(FILETIME &local_file_time,FILETIME &file_time);
|
|
int LockFile(HANDLE file,uint file_offset_low,uint file_offset_high,uint number_of_bytes_to_lock_low,uint number_of_bytes_to_lock_high);
|
|
int LockFileEx(HANDLE file,uint flags,uint reserved,uint number_of_bytes_to_lock_low,uint number_of_bytes_to_lock_high,OVERLAPPED &overlapped);
|
|
uint QueryDosDeviceW(const string device_name,ushort &target_path[],uint max);
|
|
int ReadFile(HANDLE file,ushort &buffer[],uint number_of_bytes_to_read,uint &number_of_bytes_read,OVERLAPPED &overlapped);
|
|
int ReadFile(HANDLE file,ushort &buffer[],uint number_of_bytes_to_read,uint &number_of_bytes_read,PVOID overlapped);
|
|
int ReadFileScatter(HANDLE file,FILE_SEGMENT_ELEMENT &segment_array[],uint number_of_bytes_to_read,uint &reserved,OVERLAPPED &overlapped);
|
|
int ReadFileScatter(HANDLE file,FILE_SEGMENT_ELEMENT &segment_array[],uint number_of_bytes_to_read,uint &reserved,PVOID overlapped);
|
|
int RemoveDirectoryW(const string path_name);
|
|
int SetEndOfFile(HANDLE file);
|
|
void SetFileApisToANSI(void);
|
|
void SetFileApisToOEM(void);
|
|
int SetFileAttributesW(const string file_name,uint file_attributes);
|
|
int SetFileInformationByHandle(HANDLE file,FILE_INFO_BY_HANDLE_CLASS FileInformationClass,FILE_INFO &file_information,uint buffer_size);
|
|
int SetFileIoOverlappedRange(HANDLE FileHandle,uchar &OverlappedRangeStart,uint Length);
|
|
uint SetFilePointer(HANDLE file,long distance_to_move,long &distance_to_move_high,uint move_method);
|
|
int SetFilePointerEx(HANDLE file,long distance_to_move,long &new_file_pointer,uint move_method);
|
|
int SetFileTime(HANDLE file,FILETIME &creation_time,FILETIME &last_access_time,FILETIME &last_write_time);
|
|
int SetFileValidData(HANDLE file,long ValidDataLength);
|
|
int UnlockFile(HANDLE file,uint file_offset_low,uint file_offset_high,uint number_of_bytes_to_unlock_low,uint number_of_bytes_to_unlock_high);
|
|
int UnlockFileEx(HANDLE file,uint reserved,uint number_of_bytes_to_unlock_low,uint number_of_bytes_to_unlock_high,OVERLAPPED &overlapped);
|
|
int WriteFile(HANDLE file,const ushort &buffer[],uint number_of_bytes_to_write,uint &number_of_bytes_written,OVERLAPPED &overlapped);
|
|
int WriteFile(HANDLE file,const ushort &buffer[],uint number_of_bytes_to_write,uint &number_of_bytes_written,PVOID overlapped);
|
|
int WriteFileGather(HANDLE file,FILE_SEGMENT_ELEMENT &segment_array[],uint number_of_bytes_to_write,uint &reserved,OVERLAPPED &overlapped);
|
|
int WriteFileGather(HANDLE file,FILE_SEGMENT_ELEMENT &segment_array[],uint number_of_bytes_to_write,uint &reserved,PVOID overlapped);
|
|
#import
|
|
//+------------------------------------------------------------------+
|