Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // • Code nhập dữ liệu
- System::String ^strFile;
- System::String ^tmp;
- FILE *f;
- //Mở file sẽ được lấy mẫu
- FILE *fs;
- char strPathSign[]="mn.kkt";
- char strDatFile[32];
- m_Sign sign;
- System::Boolean isHave=false;
- int iTmpOffset;
- int i;
- strFile = txtPath->Text;
- //Convert từ chuỗi trong TextBox qua chuỗi dạng chuẩn của chương trình
- //Từ đưa về chuỗi với 18 ký tự
- //Chuyển từ dạng String -> Char
- char tmpName[18];
- System::String ^strTmpName;
- strTmpName=txtName->Text;
- for (i=0; i < strTmpName->Length;i++)
- {
- tmpName[i] = strTmpName[i];
- }
- for (int i=strTmpName->Length; i <= 18;i++)
- {
- tmpName[i] = 32;
- }
- //Do trong strFile là kiểu string
- //cần phải chuyển đổi ra thành kiểu Char để đưa vào hàm
- int itmp = strFile->Length;
- char *chTmpData = new char[itmp+1];
- for(int i = 0; i<itmp;i++)
- {
- *(chTmpData + i) = strFile[i];
- };
- *(chTmpData + itmp) = '\0';
- fopen_s(&fs,chTmpData,"rb");
- fopen_s(&f,strPathSign,"a+b");
- int posEnd;
- //Xác định kích thước file
- fseek(f,0,SEEK_END);
- posEnd=ftell(f);
- //Trả về vị trí ban đầu
- fseek(f,0,SEEK_SET);
- //Tiến hành vòng lặp liệt kê mã nhận dạng
- while (ftell(f) < posEnd)
- {
- //Đọc mẫu tin lưu mã nhận dạng virus
- fread(&sign,sizeof(m_Sign),1,f);
- //Nhảy trong file muốn quét tới offset muốn xét
- //Offset này lấy từ sign.lPos
- fseek(fs,sign.lPos,SEEK_SET);
- //Lấy 32 byte tại offset đó
- fread(strDatFile,32,1,fs);
- if (compareStr(strDatFile,sign.Sign,32))
- {
- //Nhận dạng trùng mã nhận dạng
- tmp = gcnew System::String(sign.Name);
- isHave=true;
- System::Windows::Forms::MessageBox::Show(L"Mã nhận dạng này đã có trong bảng mã",L"Trùng mã nhận dạng");
- break;
- }
- if (compareStr(tmpName,sign.Name,18))
- {
- //Nhận dạng trùng tên virus đã lưu
- tmp = gcnew System::String(sign.Name);
- isHave=true;
- System::Windows::Forms::MessageBox::Show(L"Tên virus này đã có trong bảng mã nhận dạng",L"Trùng mã nhận dạng");
- break;
- }
- }
- if (!isHave)
- {
- //Sau khi kiểm tra là chưa có mã nhận dạng này + Tên virus là thao tác ghi mẫu tin dữ liệu virus mới vào
- //Lấy dữ liệu tại Offset cần lấy (Tại txtOffset)
- iTmpOffset=System::Int32::Parse(txtOffset->Text);
- fseek(fs,iTmpOffset,SEEK_SET);
- fread(strDatFile,32,1,fs);
- //Đưa dữ liệu vào một biến theo Struct m_Sign
- //Hàm strcpy xử lý lỗi trong những trường hợp này (Do có ký tự NULL)
- //Vì vậy hàm copy 2 mảng char sẽ cần tự code lại
- for (i=0;i < 32;i++)
- sign.Sign[i]=strDatFile[i];
- sign.lPos=iTmpOffset;
- strcpy(sign.Name,tmpName);
- //Nhảy đến cuối file
- fseek(f,0,SEEK_END);
- //Ghi dữ liệu vào cuối file
- fwrite(&sign,sizeof(sign),1,f);
- System::Windows::Forms::MessageBox::Show(L"Đã lưu xong mẫu tin dữ liệu virus mới",L"Thành công");
- }
- fclose(f);
- fclose(fs);
Advertisement
Add Comment
Please, Sign In to add comment