• Страница 1 из 1
  • 1
Модератор форума: No_MaTTeR, Dimitro, LightInDarkness  
C++ работа с двоичным файлом
Girin
Скаут
Есть код, объясните, пожалуйста, по порядку, что происходит с двоичным файлом, если в заданном текстовом файле написано, например:

Задание:

Код
#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
Notafraid
Скаут
Я бы тебе посоветовал зайти на другой форум, где реально могут помочь. Чекни в поиске "форум программистов". т ам найдешь раздел помощь студентам, и туда пиши. Тут тебе мало кто поможет smile
Сообщение # 2 написано 05.12.2014 в 22:27
God32
Капрал
cyberforum,там спроси.
Сообщение # 3 написано 06.12.2014 в 18:02
  • Страница 1 из 1
  • 1
Поиск: