Посмотреть описание работы с файлами в Кибор: чтение запись в текстовый файл
Реализована работа с бинарными файлами.
Для открытия файла в бинарном режиме чтения необходимо вызвать fopen с ключом "rb".
fopen ("D:\calc.exe", "rb");
Для чтения в бинарном режиме добавлена функция freadb
Синтаксис:
char preiemnik_a[999999];
freadb(#preiemnik_a[0], 999999);
Первый параметр указатель на масив char в который будет чтение. Второй количество читаемых байт. Если файл имеет меньший размер, прочитается столько сколько имеет файл.
Значение возвращаемое - количество прочитанных байт. Если второй параметр больше размера файла - вернет количество байт равное размеру файла.
Для открытия файла в бинарном режиме записи необходимо вызвать fopen с ключом "wb" или "ab".
Для записи fwriteb
Синтаксис:
fwriteb(#preiemnik_a[0], 122465);
Первый параметр указатель на масив char данный из которого надо записать. Второй количество записываемых байт байт.
fwriteb(preiemnik_a[5]);
Параметр принимаемый - char;
Пример чтения и записи с копированием exe файла:
CODE:
char preiemnik_a[999999];
int g=0;
if (fopen ("D:\calc.exe", "rb")!=0)
{
g=freadb(#preiemnik_a[0], 999999);
fclose();
}
messagebox (g);
int nn=0;
if (fopen ("D:\calc1.exe", "wb")!=0)
{
/*
r: if (nn<g)//Запись побайтово//Займет время..
{
fwriteb(preiemnik_a[nn]);
nn++;
goto r;
}
*/
fwriteb(#preiemnik_a[0], g);//Запись по указателю на масив char
fclose();
}
int g=0;
if (fopen ("D:\calc.exe", "rb")!=0)
{
g=freadb(#preiemnik_a[0], 999999);
fclose();
}
messagebox (g);
int nn=0;
if (fopen ("D:\calc1.exe", "wb")!=0)
{
/*
r: if (nn<g)//Запись побайтово//Займет время..
{
fwriteb(preiemnik_a[nn]);
nn++;
goto r;
}
*/
fwriteb(#preiemnik_a[0], g);//Запись по указателю на масив char
fclose();
}
Пример чтения текстового файла сохраненного в юникоде
CODE:
char preiemnik[999999];
int g=0;
if (fopen ("C:\Русс текст в юникоде.txt", "rb")!=0)
{
g=freadb(#preiemnik[0], 999999);
fclose();
}
string T="";
int i;
for (int n=2; n<g-1; n=n+2)
{
if (preiemnik[n]==0) goto er;
i=codhexi(#preiemnik[n], 2)-848;
if (i==-835){T=T+formatic(13)+formatic(10); n=n+2;}
else T=T+formatic(i);
}
er:;
messagebox (T);
int g=0;
if (fopen ("C:\Русс текст в юникоде.txt", "rb")!=0)
{
g=freadb(#preiemnik[0], 999999);
fclose();
}
string T="";
int i;
for (int n=2; n<g-1; n=n+2)
{
if (preiemnik[n]==0) goto er;
i=codhexi(#preiemnik[n], 2)-848;
if (i==-835){T=T+formatic(13)+formatic(10); n=n+2;}
else T=T+formatic(i);
}
er:;
messagebox (T);