Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Описание: Доработка чтения и записи в файл. Работа в бинарном режиме
Kibor
Отправлено: 28 Ноября, 2013 - 03:50:53
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Доработаны функции чтения и записи в файл.
Посмотреть описание работы с файлами в Кибор: чтение запись в текстовый файл

Реализована работа с бинарными файлами.

Для открытия файла в бинарном режиме чтения необходимо вызвать 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();
}


Пример чтения текстового файла сохраненного в юникоде
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);
 
 Top
Albaz
Отправлено: 28 Ноября, 2013 - 05:38:23
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 46
Дата рег-ции: Нояб. 2013  
Репутация: 0




Здорово
Прогресс! )))
а можно реализовать нечто:
Для массового копирования, напрмер
CODE:
fopen ("D:\*.exe", "rb");

Создать папку?
Переименовать файловый объект?
И если вдруг приспичит копировать директорию со всеми файлами и вложенными папками?
 
 Top
Kibor
Отправлено: 29 Ноября, 2013 - 04:00:52
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Тут действительно можно воспользоваться командной строкой значительно расширив возможности и такие задачи решать через нее.

Пример который создаст папку на диске 1111111111 и скопирует в нее файл cacl.exe:

CODE:
win w;
char tx[9999];
initial();


//Команды
vvod("md c:\1111111111");
vvod("copy c:\windows\system32\calc.exe c:\1111111111\calc.exe");
////////.................................................



key("exit");
key(RETURN);

/////////////////////////////////////

function initial()
{
start("C:\WINDOWS\system32\cmd.exe");
a: w=window (-1, "ConsoleWindowClass", -1);if (w==0) {sleep(50); goto a;}
sendlanguage("00000409", w);
}

function vvod(string cmnda)
{
strcpy(#tx[0], cmnda);
int sz=size(#tx[0]);
int sh;
int n=0;
t: if (n<sz)
{
sh=0;
if (tx[n]==':' || tx[n]=='_'){keydown(SHIFT);sh=1;}//Тут символы надо для набора которых нажать шифт
key(tx[n]);
if (sh==1)keyup(SHIFT);
n++;
goto t;
}
key(RETURN);
}
 
 Top
Albaz
Отправлено: 10 Января, 2014 - 19:06:16
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 46
Дата рег-ции: Нояб. 2013  
Репутация: 0




 Kibor пишет:
Доработаны функции чтения и записи в файл.

А как бы еще возвращение каретки?

(Отредактировано автором: 10 Января, 2014 - 19:06:42)

 
 Top
Kibor
Отправлено: 10 Января, 2014 - 19:37:14
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 Albaz пишет:
возвращение каретки?

Перевод строки?

Если перевод строки, то это будет 2 байта:
\r\n или 13 10
CODE:
char stperev[2];
stperev[0]=formatic(13);
stperev[1]=formatic(10);


Эти байты надо записать в место где надо перевести строку.
 
 Top
Dantes3000
Отправлено: 23 Мая, 2019 - 23:22:52
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




Вылетает кибор (Отобразить)


Не вылетает (Отобразить)


почему?
 
 Top
Kibor
Отправлено: 24 Мая, 2019 - 00:31:37
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 Dantes3000 пишет:
Вылетает кибор

Устранил.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by