DELTREE.C
资源名称:C.rar [点击查看]
上传用户:qq5388545
上传日期:2022-07-04
资源大小:29849k
文件大小:2k
源码类别:

界面编程

开发平台:

C/C++

  1. #include <dos.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <direct.h>
  5. #include <malloc.h>
  6. #include <string.h>
  7. void main (int argc, char **argv)
  8.  {
  9.    void delete_tree(void);
  10.    char buffer[128];
  11.    char drive[_MAX_DRIVE], directory[_MAX_DIR],
  12.       filename[_MAX_FNAME], ext[_MAX_EXT];
  13.    if (argc < 2)
  14.      {
  15.        printf ("Syntax errorn");
  16.        exit(0);
  17.      }
  18.    _splitpath (argv[1], drive, directory, filename, ext);
  19.    getcwd (buffer, sizeof(buffer));
  20.    if (drive[0] == NULL)
  21.      {
  22.        _splitpath (buffer, drive, directory, filename, ext);
  23.        strcpy (buffer, directory);
  24.        strcat (buffer, filename);
  25.        strcat (buffer, ext);
  26.      }
  27.    else
  28.      { 
  29.        printf ("Do not specify drive lettern");
  30.        exit (1);
  31.      }
  32.    if (strcmpi(buffer, argv[1]) == 0)
  33.      {
  34.        printf ("Cannot delete current directoryn");
  35.        exit (1);
  36.      }
  37.   
  38.    getcwd (directory, 64);
  39.    if (chdir (argv[1]))
  40.      printf ("Invalid directory %sn", argv[1]);
  41.    else
  42.      delete_tree(); 
  43.    chdir (directory);
  44.    rmdir (argv[1]);
  45.  }
  46. union REGS inregs, outregs;
  47. struct SREGS segs;
  48. void delete_tree(void)
  49.  {
  50.    struct find_t fileinfo;
  51.    int result;
  52.    char far *buffer;
  53.    unsigned dta_seg, dta_ofs;
  54.    result = _dos_findfirst("*.*", 16, &fileinfo);
  55.    inregs.h.ah = 0x2f;
  56.    intdosx (&inregs, &outregs, &segs);
  57.    dta_seg = segs.es;
  58.    dta_ofs = outregs.x.bx;
  59.    while (! result)
  60.     {
  61.       if ((fileinfo.attrib & 16) && (fileinfo.name[0] != '.'))
  62. {
  63.    buffer = _fmalloc (256);
  64.    if (buffer == NULL)
  65.      {
  66.        printf ("Insufficient memoryn");
  67.        exit(1);    
  68.      }
  69.    inregs.h.ah = 0x1A;
  70.    inregs.x.dx = FP_SEG(buffer);
  71.    segread(&segs);
  72.    intdosx (&inregs, &outregs, &segs);
  73.    chdir (fileinfo.name);
  74.    delete_tree(); 
  75.    chdir ("..");
  76.    inregs.h.ah = 0x1A;
  77.    inregs.x.dx = dta_ofs;
  78.    segs.ds = dta_seg;
  79.    _ffree (buffer);
  80.    rmdir (fileinfo.name);
  81. }
  82.       else if (fileinfo.name[0] != '.')
  83. {
  84.    _dos_setfileattr(fileinfo.name, 0);
  85.    remove (fileinfo.name);
  86. }
  87.   
  88.       result = _dos_findnext (&fileinfo);
  89.     }
  90.  }