Tôi đang cố gắng viết mã mô phỏng quá trình quét chống vi-rút, quét 5 tệp cụ thể và sau đó tạo một tệp có tên Chống vi-rútLog.txt
tài liệu. Trong tập tin này nó ghi kết quả như PSY.avi bị nhiễm trùng
. Các tập tin bị nhiễm là các tập tin bao gồm dấu hiệu youtube
chuỗi trong tập tin.
Vấn đề của tôi là khi tôi cố in kết quả ra một tệp Chống vi-rútLog.txt
, nó không in gì và để trống tập tin.
Mã của tôi:
#include
#include
#include
#include
#defineBUZZ_SIZE 1024
int fast_scan(char *fname, char *str, FILE *fs);
int Slow_scan(char *fname, char *str, FILE *fs);
int main(int argc, char *argv[])
{
tên char[100];
lựa chọn char[5];
buff char[BUZZ_SIZE];
TẬP TIN *f7, *f2;
struct dirent *de;
TRỰC TIẾP *dr = opendir(argv[1]);
if (dr == NULL) // opendir trả về NULL nếu không thể mở thư mục
{
printf("Không thể mở thư mục hiện tại");
return 0;
}
f2 = fopen(argv[2], "rb");
f7 = fopen("AntiVirusLog.txt", "wt");
printf("Chào mừng bạn đến với chương trình Chống vi-rút của Amnon\n bạn muốn chọn chế độ quét nào?:\n");
printf("Nhanh: chỉ kiểm tra 20% đầu tiên và 20% cuối cùng của tệp\n Chậm: Kiểm tra toàn bộ tệp\n");
printf("Nhập nhanh để quét nhanh và nhập chậm để quét chậm\n");
scanf("%s", lựa chọn);
if ((strcmp(lựa chọn, "chậm"))==0)
{
trong khi ((de = readdir(dr)) != NULL)
{
strcpy(tên, argv[1]);
strcat(tên, de->d_name);
if((fgets(buff, BUZZ_SIZE, f2)) != NULL)
{
Slow_scan(tên, buff, f7);
}
}
}
if ((strcmp(lựa chọn, "nhanh")) == 0)
{
trong khi ((de = readdir(dr)) != NULL)
{
strcpy(tên, argv[1]);
strcat(tên, de->d_name);
if ((fgets(buff, BUZZ_SIZE, f2)) != NULL)
{
fast_scan(tên, buff, f7);
}
}
}
printf("Quét thành công, kiểm tra file AntiVirusLog.txt để xem kết quả\n");
đã đóng(dr);
fclose(f2);
fclose(f7);
hệ thống ("TẠM DỪNG");
trở về (0);
}
int Slow_scan(char *fname, char *str, FILE *fs)
{
int tìm thấy = 0;
TẬP TIN *fp;
nhiệt độ char[BUZZ_SIZE];
if ((fopen_s(&fp, fname, "rb")) != NULL)
{
trở lại (-1);
}
while ((fgets(temp, BUZZ_SIZE, fp)) != NULL)
{
if ((strstr(temp, str)) != NULL)
{
fprintf(fs, "%s INFECTED\n", fname);
tìm thấy++;
}
}
nếu (tìm==0)
{
fprintf(fs, "%s KHÔNG BỊ NHIỄM\n", fname);
}
fclose(fp);
return(0);
}
int fast_scan(char *fname, char *str, FILE *fs)
{
int findres=0;
int i, j, len, partlen;
TẬP TIN *fp;
if ((fopen_s(&fp, fname, "rb")) != NULL)
{
trở lại (-1);
}
fseek(fp, 0, SEEK_END);
len = ftell(fp);
partlen = (len * 20)/100;
char *temp=malloc(partlen);
while ((fgets(temp, BUZZ_SIZE, fp)) != NULL)
{
for (i = 0; i < partlen; i++)
{
nếu (temp[i]=str[i])
{
tìm thấy++;
}
nếu (temp[i] != str[i])
{
i = partlen + 1;
}
if (tìm == partlen)
{
fprintf(fs, "%s INFECTED\n", fname);
i = partlen + 1;
}
}
for (j = len - partlen; j < len; j++)
{
nếu (temp[j] = str[j])
{
tìm thấy++;
}
nếu (temp[j] != str[j])
{
j = partlen + 1;
}
if (tìm == partlen)
{
fprintf(fs, "%s INFECTED\n", fname);
j = partlen + 1;
}
}
}
if (tìm thấy!= partlen)
{
fprintf(fs, "%s KHÔNG BỊ NHIỄM\n", fname);
}
fclose(fp);
return(0);
}
Tôi là một lập trình viên xuất sắc, rất giỏi!