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

📄 babomain.c

📁 该代码中包含数十个磁盘以及文件系统信息获取和修复的代码
💻 C
字号:
//********************************************
//文件名:BABOMAIN.C
//功能:1. 调用显示汉字函数
//      2. 调用读扇区汇编子程序
//   3. 将分区表和引导扇区的数据写入文件加以保存
//********************************************
#include<string.h>                    //1.
#include<graphics.h>                  //2.
#include<stdio.h>                     //3.
#include<conio.h>                     //4.
#include<ctype.h>                     //5.
#include<fcntl.h>                     //6.
#include<io.h>                        //7.
#include<stdlib.h>                    //8.
extern RHD(int,int,int,int,char *);   //9.声明读扇区汇编子程序
int outhz(int,int,char *,int);        //10.声明汉字显示函数
void filename(char *);                //11.声明文件名检测函数
char tmp[13];                         //12.
void main()                           //13.
{                                     //14.
  FILE *tmfp,*fp,*bafp;               //15.
  char sh[512];                       //16.
  char file[3];                       //17.
  char th[20];                        //18.
  int i,c,y;                          //19.
  int name=1;                         //20.
  unsigned long k=0;                  //21.
  unsigned long data1,data2;          //22.
  unsigned char s1,s2,s3,s4;          //23.
  int gdriver=DETECT,gmode;           //24.
  registerbgidriver(EGAVGA_driver);   //25.
  initgraph(&gdriver,&gmode,"");      //26.
  setbkcolor(0);                      //27.
  cleardevice();                      //28.
                                      //29.
  if((bafp=fopen("senumber.txt",      //30.如果打开文件成功
  "rb"))!=NULL)                       //31.
  {                                   //32.
    fclose(bafp);                     //33.
    setviewport(0,20,400,60,0);       //34.
    outhz(0,20,"本程序需要建立"       //35.
      "[SENUMBER.TXT]文件",7);        //36.
    outhz(0,40,"使用该名字的文件"     //37.
      "在当前目录下已经存在!",14);   //38.
    outhz(0,60,"是否继续运行"         //39.
    "(Y/N)?",15);               //40.
    c=toupper(getch());               //41.
    while((c==78)||(c==89))           //42.
    {                                 //43.
      if(c==78)                       //44.
      {                               //45.
        closegraph();                 //46.
        exit(0);                      //47.
      }                               //48.
      if(c==89)                       //49.
        break;                        //50.
    }                                 //51.
  }                                   //52.
                                      //53.
  y=20;                               //54.坐标赋值
  cleardevice();                      //55.
  setviewport(0,20,400,460,0);        //56.
  outhz(0,y,"分区表和分区引导"        //57.
  "记录的扇区号:",7);                //58.
  ltoa(k,th,10);                      //59.数转字符串
  y=y+20;                             //60.坐标下移
  outhz(0,y,"扇区号:",7);            //61.
  outhz(80,y,th,7);                   //62.
  bafp=fopen("senumber.txt","wb");    //63.以写方式建立文件
  fprintf(bafp,"分区表和分区引导"     //64.将标题写入文件
  "记录的扇区号:\n");                //65.
  fprintf(bafp,"%lu\n",k);            //66.将扇区号写入文件
  tmfp=tmpfile();                     //67.
  fwrite(&k,4,1,tmfp);                //68.
  rewind(tmfp);                       //69.
  fread(&s4,1,1,tmfp);                //70.
  fread(&s3,1,1,tmfp);                //71.
  fread(&s2,1,1,tmfp);                //72.
  fread(&s1,1,1,tmfp);                //73.
  fclose(tmfp);                       //74.
  tmpnam(tmp);                        //75.返回临时文件名
  RHD(s1,s2,s3,s4,tmp);               //76.调用读扇区汇编子程序
  fp=fopen(tmp,"rb");                 //77.
  for(i=0;i<=511;i++)                 //78.
    sh[i]=fgetc(fp);                  //79.将文件读入数组
  fseek(fp,470,0);                    //80.移动文件指针
  fread(&data1,4,1,fp);               //81.读一个双字
  fclose(fp);                         //82.
  itoa(name,file,10);                 //83.数转字符串
  filename(file);                     //84.调用文件名检测函数
  fp=fopen(file,"wb");                //85.以写方式建立文件
  for(i=0;i<=511;i++)                 //86.
    fputc(sh[i],fp);                  //87.将数组内容输出到文件
  fclose(fp);                         //88.
  name++;                             //89.文件名增1
  k=k+63;                             //90.计算分区引导记录扇区号
  ltoa(k,th,10);                      //91.数转字符串
  y=y+20;                             //92.
  outhz(0,y,"扇区号:",7);            //93.
  outhz(80,y,th,7);                   //94.显示扇区号
  fprintf(bafp,"%lu\n",k);            //95.将扇区号写入文件
  tmfp=tmpfile();                     //96.
  fwrite(&k,4,1,tmfp);                //97.
  rewind(tmfp);                       //98.
  fread(&s4,1,1,tmfp);                //99.
  fread(&s3,1,1,tmfp);                //100.
  fread(&s2,1,1,tmfp);                //101.
  fread(&s1,1,1,tmfp);                //102.
  fclose(tmfp);                       //103.
  itoa(name,file,10);                 //104.数转字符串
  filename(file);                     //105.调用文件名检测函数
  RHD(s1,s2,s3,s4,file);              //106.调用读扇区汇编子程序
  name++;                             //107.
  if(data1==0)                        //108.若字段值为0
    exit(0);                          //109.退出
                                      //110.
  k=data1;                            //111.下一个盘符的分区表扇区号
  while(1)                            //112.
  {                                   //113.
    ltoa(k,th,10);                    //114.
    y=y+20;                           //115.
    outhz(0,y,"扇区号:",7);          //116.
    outhz(80,y,th,7);                 //117.
    fprintf(bafp,"%lu\n",k);          //118.
    tmfp=tmpfile();                   //119.
    fwrite(&k,4,1,tmfp);              //120.
    rewind(tmfp);                     //121.
    fread(&s4,1,1,tmfp);              //122.
    fread(&s3,1,1,tmfp);              //123.
    fread(&s2,1,1,tmfp);              //124.
    fread(&s1,1,1,tmfp);              //125.
    fclose(tmfp);                     //126.
    RHD(s1,s2,s3,s4,tmp);             //127.
    fp=fopen(tmp,"rb");               //128.
    for(i=0;i<=511;i++)               //129.
      sh[i]=fgetc(fp);                //130.
    fseek(fp,470,0);                  //131.移动文件指针
    fread(&data2,4,1,fp);             //132.读一个双字
    fclose(fp);                       //133.
    itoa(name,file,10);               //134.
    filename(file);                   //135.
    fp=fopen(file,"wb");              //136.
    for(i=0;i<=511;i++)               //137.
      fputc(sh[i],fp);                //138.
    fclose(fp);                       //139.
    name++;                           //140.
    k=k+63;                           //141.计算分区引导记录扇区号
    ltoa(k,th,10);                    //142.
    y=y+20;                           //143.
    outhz(0,y,"扇区号:",7);          //144.
    outhz(80,y,th,7);                 //145.
    fprintf(bafp,"%lu\n",k);          //146.
    tmfp=tmpfile();                   //147.
    fwrite(&k,4,1,tmfp);              //148.
    rewind(tmfp);                     //149.
    fread(&s4,1,1,tmfp);              //150.
    fread(&s3,1,1,tmfp);              //151.
    fread(&s2,1,1,tmfp);              //152.
    fread(&s1,1,1,tmfp);              //153.
    fclose(tmfp);                     //154.
    itoa(name,file,10);               //155.
    filename(file);                   //156.
    RHD(s1,s2,s3,s4,file);            //157.
    name++;                           //158.
    if(data2==0)                      //159.若字段值为0
      break;                          //160.跳出循环
    k=data1+data2;                    //161.计算第三个盘符的分区表扇区号
  }                                   //162.
  fclose(bafp);                       //163.
  remove(tmp);                        //164.删除临时文件名
  y=y+20;                             //165.
  outhz(0,y,"分区表和分区引导"        //166.
  "记录已经建立备份文件",7);          //167.
  y=y+20;                             //168.
  outhz(0,y,"按任一键退出",7);        //169.
  getch();                            //170.
  closegraph();                       //171.
}                                     //172.
                                      //173.
void filename(char *p)                //174.文件名检测函数
{                                     //175.
  FILE *fp;                           //176.
  int c;                              //177.
  if((fp=fopen(p,"rb"))!=NULL)        //178.如果打开文件成功
  {                                   //179.
    fclose(fp);                       //180.
    cleardevice();                    //181.
    setviewport(0,0,400,20,0);        //182.
    outhz(0,20,"本程序需要建立"       //183.
      "文件:",7);                    //184.
    outhz(180,20,p,7);                //185.
    outhz(0,40,"使用该名字的文件"     //186.
      "在当前目录下已经存在!",14);   //187.
    outhz(0,60,"是否继续运行"         //188.
    "(Y/N)?",15);               //189.
    c=toupper(getch());               //190.
    while((c==78)||(c==89))           //191.
    {                                 //192.
      if(c==78)                       //193.
      {                               //194.
        remove(tmp);                  //195.删除临时文件名
        closegraph();                 //196.
        exit(0);                      //197.
      }                               //198.
      if(c==89)                       //199.
        break;                        //200.
    }                                 //201.
  }                                   //202.
}                                     //203.

⌨️ 快捷键说明

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