|
|
Модератор форума: No_MaTTeR, Dimitro, LightInDarkness |
Форум Полезное Флудилка C++ работа с двоичным файлом (нужна помощь) |
C++ работа с двоичным файлом |
Есть код, объясните, пожалуйста, по порядку, что происходит с двоичным файлом, если в заданном текстовом файле написано, например:
Задание: Код #include <iostream> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> #define SIGN "4tgJKtwitge4629" #pragma hdrstop using namespace std; #pragma argsused int main(int argc, char* argv[]) { if(argc!=2) { cout<<"\n Ishodnyiy fayl ne zadan \n Perezapustite programmu s argumentom"; getch(); return 1; } FILE *ftext; if((ftext=fopen(argv[1], "rt"))==NULL) { cout<<"\n Ne udaetsya otkryit ishodnyiy fayl\n"; getch(); return 2; } cout<<"\n Ishodnyiy fayl uspeshno otkryit\n"; //--------- char name[256]; strcpy(name,argv[1]); char* pch = strtok(name,"."); strcat(name,".idx"); FILE *findex; if((findex=fopen(name, "wb"))==NULL) { cout<<"\n Ne udalos sozdat fayl indeksa"; fclose(ftext); getch(); return 3; } //--------- char buf[256]; int i=0; int Pos=0; fwrite (SIGN,sizeof(char), strlen(SIGN)+1, findex); fwrite (&i, sizeof(int), 1, findex); for(;;) { Pos=ftell(ftext); if (fgets(buf,80,ftext)==NULL) break; fwrite (&Pos, sizeof(int), 1, findex); i++; } fclose(findex); cout<<"\n Kolichestvo strok v tekstovom fayle: "<<i; //--------- if((findex=fopen(name, "rb"))==NULL) { cout<<"\n Ne udaetsya otkryit fayl indeksa\n"; getch(); return 4; } else cout<<"\n Fayl indeksa uspeshno otkryit dlya chteniya.\n"; char str[sizeof(SIGN)+1]; fread(str,sizeof(char),strlen(SIGN)+1,findex); if(strcmp(str,SIGN)!=0) { printf("Signatura fayla ne podhodit"); return 5; } //--------- int usernumber; cout<<"\n Kakuyu stroku nuzhno vyivesti? "; select: cin>>usernumber; if (usernumber>i) { cout<<" V etom fayle vsego "<<i<<" strok. Vyiberite druguyu stroku: "; goto select; } cout<<"\n Stroka "<<usernumber<<":\n "; int b=(usernumber+4)*4; fseek (findex, b, SEEK_SET); int address; fread (&address,sizeof(int),1,findex); fclose(ftext); //--------- if((ftext=fopen(argv[1], "rt"))==NULL) { cout<<"\n Ne udaetsya otkryit ishodnyiy fayl\n"; getch(); return 2; } char buf2[256]; fseek (ftext, address, SEEK_SET); fgets(buf2,256,ftext); puts(buf2); fclose(findex); fclose(ftext); getch(); return 0; }
Сообщение # 1 написано 05.12.2014 в 17:38
|
| |||
| |||