Файловые операции

Во всех функциях, работающих с файлами, одним из параметров является имя файла (строка).

Если имя файла начинается с двух точек, например "..file.bin", то вместо этих двух точек будет подставлен путь к папке, в которой расположен скрипт. Например, если полный путь к файлу скрипта имеет вид "C:\iProgPro\Scripts\MyScript", то имя файла "..file.bin" будет заменено на "C:\iProgPro\Scripts\MyScript\file.bin".

Если в имени файла слева имеется какой-то путь, то эти подпапки будут созданы автоматически при первом обращении к файлу на запись. Например, если полный путь к файлу скрипта имеет вид "C:\iProgPro\Scripts\MyScript", а имя файла записано как "..\\Folder\\Subfolder\\file.bin" то окончательное имя файла будет "C:\iProgPro\Scripts\MyScript\Folder\Subfolder\file.bin". Папки Folder и Subfolder будут созданы автоматически.

Если же двух точек в начале имени файла нет, то это имя рассматривается как обычное имя файла. Может быть указан полный путь к файлу. При явном задании пути в имени файла нужно всегда использовать удвоенный слеш \\. Иначе в пути файла может получится управляющая последовательность, никакой ошибки для компилятора не будет, но реально путь получится недостоверным. Например, если задать имя файла "..\temp\aaa.bin", то в нем будет две управляющих последовательности - \t (заменится на байт 9) и \a (заменится на байт 7). И имя файла получится - две точки, байт 9, символы "emp", байт 7, символы "aa.bin".

Функция FileSize возвращает размер файла в байтах или -1, если такой файл не существует.

Пример:

void main(int id)
{
    int a = FileSize("..aaa.bin");
   
if(a == -1) print("Файл \"aaa.bin\" не существует.");
   
else print("\nРазмер файла \"aaa.bin\" "+a+" байт.");
}

Функция SaveToFile сохраняет содержимое массива в файл на диске. Формат:

int SaveToFile(string Filename, Array);

Filename
Имя файла, в который будет сохранение.
Если файл с таким именем уже существует на диске, его старое содержимое будет удалено и переписано новыми значениями.

Array
Имя массива, содержимое которого будет сохраняться в файл.

Массив может быть любого типа (char, uchar, short, ushort, int). Значения не байтовых массивов сохраняются в формате от старшего к младшему (wiki). Например, если сохраняется массив типа int и в нем два элемента со значениями 0x12345678 и 0xABCDEF00, то в результате сохранения этого массива в файл он будет иметь размер восемь байт и его содержимое будет 0x12,0x34,0x56,0x78,0xAB,0xCD,0xEF,0x00.

Возвращаемое значение
Размер созданного файла на диске или ноль, если сохранения не было (недопустимые символы в имени файла, запрещена запись в папку или другие причины).

Функция AddToFile дописывает содержимое массива в файл на диске.

int AddToFile(string Filename, Array);

Filename
Имя файла, в который будет сохранение.
Если файл с таким именем уже существует на диске, то новые значения будут дописаны в конец файла.
Если файл не существует, то он будет создан и в него будет записано соддержимое массива (аналогично SaveToFile).

Array
Имя массива, содержимое которого будет дописываться или сохраняться в файл.

Массив может быть любого типа (char, uchar, short, ushort, int). Значения не байтовых массивов сохраняются в формате от старшего к младшему.

Возвращаемое значение
Размер дописанных данных или ноль, если сохранения не было (недопустимые символы в имени файла, запрещена запись в папку или другие причины).

Функция дописывает текстовую строку в конец указанного файла.

int PrintToFile(string Filename, string Text);

Filename
Имя файла, в который будет сохранение.
Если файл с таким именем уже существует на диске, то новые значения будут дописаны в конец файла.
Если файл не существует, то он будет создан и в него будет записано содержимое Text.

Text
Текстовая строка, которая будет дописана в файл.

Возвращаемое значение
Количество байт, дописанных в файл. Если возвращаемое значение равно нулю и записывалась ненулевая строка, то скорее всего имя файла имеет недопустимые символы или заблокирована запись по указанному пути.

Пример:

void main(int id)
{
   
PrintToFile("..\\log\\log.txt", "\r\n**********************");
   
PrintToFile("..\\log\\log.txt", "\r\n* Hello!!! *");
   
PrintToFile("..\\log\\log.txt", "\r\n**********************");
}

Функция LoadFromFile загружает содержимое файла с диска в массив.

int LoadFromFile(string Filename, Array);

Filename
Имя файла, из которого будут загружаться данные

Array
Массив, в который будут загружаться данные. Массив может быть любого типа. Если массив не байтовый, то значения массива читаются из файла в формате от старшего байта к младшему.

Возвращаемое значение
Количество прочитанных байт. Если значение равно нулю, то или файл имеет нулевой размер или файл отсутствует на диске.

Файл читается с самого начала, с нулевого байта. Если размер файла больше размера массива в байтах, то количество прочитанных байт равно размеру массива в байтах. Иначе количество прочитанных байт равно размеру файла.

Пример:

void main(int id)
{
   
int a[32];
   
id = LoadFromFile("d:\\abcd.bin",a);
   
if(0 == id) print("\nОшибка чтения файла.");
   
else print("\nЧтение OK. Прочитано байт: "+id);
}

Функция LoadPartFromFile загружает часть файла с диска в массив.

int LoadPartFromFile(string Filename, Array, int Offsed);

Filename
Имя файла, из которого будут загружаться данные.

Array
Массив, в который будут загружаться данные. Массив может быть любого типа. Если массив не байтовый, то значения массива читаются из файла в формате от старшего байта к младшему.

Offsed
Индекс байта в файле, с которого начнется чтение.

Возвращаемое значение
Количество прочитанных байт. Если значение равно нулю, то или файл имеет нулевой размер или файл отсутствует на диске или параметр Offsed имеет недопустимое значение.

Количество читаемых байт обычно равно размеру массива в байтах. Если же при чтении файл заканчивается, количество прочитанных байт будет равно количеству байт, которые успели прочитаться до конца файла.

Пример:

Из файла data.bin в папке скрипта будут прочитаны байты 3,4,5,6 в массив a.

void main(int id)
{
   
uchar a[4];
   
id = LoadPartFromFile("..data.bin",a,3);
   
if(0 == id) print("\nОшибка чтения файла.");
   
else print("\nЧтение OK. Прочитано байт: "+id);
}

Функция возвращает имя файла в зависимости от заданного параметра.

string s = GetFilename(int Mode);

Mode
Тип запроса

  • 0 - Отображается стандартный диалог Открытия файла и возвращается полный путь файла, который был выбран в этом диалоге.
  • 1 - Отображается стандартный диалог Сохранения файла и возвращается полный путь файла, который был выбран в этом диалоге.
  • 2 - Возвращается имя файла локализации, выбранного в данный момент.

Если возвращается пустая строка, то пользователь не завершил выбор файла (нажал кнопку отмены).

Функция удаляет файл на диске.

string s = DeleteFile(string FileName);

FileName
Имя файла, который нужно удалить на диске.

Возвращаемое значение

  • -1 - файла с таким именем нет на диске
  • 0 - файл существует но не был удален
  • 1 - файл был успешно удален

Файл не будет удален, если

  • Нет прав на удаление файла в сиситеме
  • Файл имеет одно из расширений:
    • *.exe
    • *.ipp
    • *.ipr
    • *.blr