⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecwmain.c

📁 硬盘扇区读写技术-修复硬盘与恢复文件随书源代码
💻 C
字号:
//********************************************
//文件名:ECWMAIN.C
//功能:1. 将扇区文件数据用十六进制显示在屏幕上
//      2. 调用显示汉字函数
//      3. 调用字符处理函数
//      4. 调用汇编子程序将文件数据写入扇区
//********************************************
#include<string.h>                        //1.
#include<graphics.h>                      //2.
#include<stdio.h>                         //3.
#include<conio.h>                         //4.
#include<stdlib.h>                        //5.
#include<ctype.h>                         //6.
#include<fcntl.h>                         //7.
#include<io.h>                            //8.
extern RHD(int,int,int,int,char *);       //9.
int outhz(int,int,char *,int);            //10.
void finame(int,int);                     //11.
void disph(void);                         //12.
unsigned char h[512];                     //13.
extern WHD(int,int,int,int,char *);       //14.
void main()                               //15.
{                                         //16.
  FILE *tmfp,*fp;                         //17.
  unsigned long k;                        //18.
  int i,c;                                //19.
  char *ch;                               //20.
  char fh[512];                           //21.
  char sh[20];                            //22.
  long t=0;                               //23.
  unsigned char s1,s2,s3,s4;              //24.
  extern char gsh[16];                    //25.
  int gdriver=DETECT,gmode;               //26.
  registerbgidriver(EGAVGA_driver);       //27.
  initgraph(&gdriver,&gmode,"");          //28.
  setbkcolor(0);                          //29.
  cleardevice();                          //30.
                                          //31.
  outhz(0,20,"输入扇区数据文件名:",7);   //32.调用汉字显示函数
  finame(180,20);                         //33.调用字符处理函数
  strcpy(ch,gsh);                         //34.拷贝字符串
  while(1)                                //35.
  {                                       //36.
    if((fp=fopen(gsh,"rb"))==NULL)        //37.若打开文件失败
    {                                     //38.
      cleardevice();                      //39.
      setviewport(0,0,200,20,0);          //40.
      outhz(0,20,"输入的扇区数据文件名"   //41.
      "没有找到!",7);                    //42.
      outhz(0,40,"是否继续输入扇区数据"   //43.
      "文件名(Y/N)?",7);            //44.
      c=toupper(getch());                 //45.
      while((c==78)||(c==89))             //46.
      {                                   //47.
        if(c==78)                         //48.
        {                                 //49.
          closegraph();                   //50.
          exit(0);                        //51.
        }                                 //52.
        if(c==89)                         //53.
        {                                 //54.
          cleardevice();                  //55.
          outhz(0,20,"输入扇区数据"       //56.
          "文件名:",7);                  //57.
          finame(180,20);                 //58.
          strcpy(ch,gsh);                 //59.
          break;                          //60.
        }                                 //61.
      }                                   //62.
    }                                     //63.
    else                                  //64.否则
      break;                              //65.
  }                                       //66.
  fclose(fp);                             //67.
  i=open(ch,O_CREAT);                     //68.
  if(filelength(i)!=512)                  //69.测试文件字节数
  {                                       //70.
    close(i);                             //71.
    cleardevice();                        //72.
    setviewport(0,0,200,20,0);            //73.
    outhz(0,20,"输入的扇区数据文件名"     //74.
     "错误!",14);                        //75.
    outhz(0,40,"按任一键退出",15);        //76.
    getch();                              //77.
    closegraph();                         //78.
    exit(0);                              //79.
  }                                       //80.
  close(i);                               //81.
                                          //82.
  fp=fopen(ch,"rb");                      //83.
  for(i=0;i<=511;i++)                     //84.
  {                                       //85.
    h[i]=fgetc(fp);                       //86.读文件字符
  }                                       //87.
  fclose(fp);                             //88.
  cleardevice();                          //89.
  setviewport(0,0,600,320,0);             //90.
  disph();                                //91.调用十六进制显示函数
  setviewport(0,320,300,400,0);           //92.
  outhz(0,0,"上面是显示的扇区文件"        //93.
  "十六进制数据:",7);                    //94.
  fp=fopen(ch,"rb");                      //95.
  for(i=0;i<=511;i++)                     //96.
  {                                       //97.
    fh[i]=fgetc(fp);                      //98.读文件字符
  }                                       //99.
  fclose(fp);                             //100.
  for(i=0;i<=511;i++)                     //101.
    t+=fh[i];                             //102.字节值累加
  ltoa(t,sh,10);                          //103.数转字符串
  outhz(0,40,"扇区文件512个"           //104.
  "字节的算术和是:",7);                  //105.
  outhz(290,40,sh,7);                     //106.
                                          //107.
  outhz(0,60,"数据是否写入"               //108.
  "扇区(Y/N)?",7);                  //109.
  c=toupper(getch());                     //110.
  while((c==78)||(c==89))                 //111.
  {                                       //112.
    if(c==78)                             //113.
    {                                     //114.
      closegraph();                       //115.
      exit(0);                            //116.
    }                                     //117.
    if(c==89)                             //118.
      break;                              //119.
  }                                       //120.
  outhz(0,80,"输入写数据的扇区号:",7);   //121.
  finame(180,400);                        //122.
  k=atol(gsh);                            //123.字符串转数
  tmfp=tmpfile();                         //124.
  fwrite(&k,4,1,tmfp);                    //125.扇区数写入临时文件
  rewind(tmfp);                           //126.调整文件指针
  fread(&s4,1,1,tmfp);                    //127.读一个字节
  fread(&s3,1,1,tmfp);                    //128.
  fread(&s2,1,1,tmfp);                    //129.
  fread(&s1,1,1,tmfp);                    //130.
  fclose(tmfp);                           //131.
  WHD(s1,s2,s3,s4,ch);                    //132.调用汇编子程序写入扇区
  fclose(tmfp);                           //133.
  setviewport(0,400,300,440,0);           //134.
  outhz(0,20,"数据已经写入扇区",7);       //135.
  outhz(0,40,"按任一键退出",7);           //136.
  getch();                                //137.
  closegraph();                           //138.
}                                         //139.
char gsh[16];                             //140.定义全局变量
                                          //141.
void disph()                              //142.十六进制显示函数
{                                         //143.
  FILE *tmfp;                             //144.
  char q[2];                              //145.
  int x,y,m;                              //146.
  int i,j,k,l;                            //147.
  int x1,x2,y1,y2;                        //148.
  x1=0;  x2=600;                          //149.
  y1=0;  y2=20;                           //150.
  i=0;  j=0;                              //151.
  while(j<16)                             //152.
  {                                       //153.
    setviewport(x1,y1,x2,y2,0);           //154.
    x=0;  y=0;  k=0;                      //155.
    while(k<32)                           //156.
    {                                     //157.
      moveto(x,y);                        //158.
      tmfp=tmpfile();                     //159.
      m=h[i];                             //160.
      fprintf(tmfp,"%2x",m);              //161.
      rewind(tmfp);                       //162.
      l=0;                                //163.
      while(l<2)                          //164.
      {                                   //165.
        *q=fgetc(tmfp);                   //166.
        *(q+1)='\0';                      //167.
        settextstyle(DEFAULT_FONT,        //168.
        HORIZ_DIR,1);                     //169.
        outtextxy(x,y+4,q);               //170.
        x+=8+1;  l++;                     //171.
      }                                   //172.
      i++;   k++;                         //173.
      fclose(tmfp);                       //174.
    }                                     //175.
    j++;                                  //176.
    y1=y1+20;  y2=y2+20;                  //177.
  }                                       //178.
}                                         //179.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -