回 帖 发 新 帖 刷新版面

主题:驱动器问题???

我在TC编程中需要对驱动器及目录文件进行处理,但最古老的C怎样实现我就不清楚了。我 要进行的工作是把取出分区的总数,置驱动工器为哪一个分区,显示当前目录下的所有文件,还有文件的扩展名,或选取其中扩展名一定的所有文件。最后还有一个格式化驱动器的问题。请高手赐教。感恩不尽!!

回复列表 (共13个回复)

沙发

函数名: findfirst, findnext
功  能: 搜索磁盘目录; 取得下一个匹配的findfirst模式的文件
用  法: int findfirst(char *pathname, struct ffblk *ffblk, int attrib);
int findnext(struct ffblk *ffblk);
程序例:

/* findnext example */

#include <stdio.h>
#include <dir.h>

int main(void)
{
   struct ffblk ffblk;
   int done;
   printf("Directory listing of *.*\n");
   done = findfirst("*.*",&ffblk,0);
   while (!done)
   {
      printf("  %s\n", ffblk.ff_name);
      done = findnext(&ffblk);
   }

   return 0;
}

板凳

函数名: bdos
功  能: DOS系统调用
用  法: int bdos(int dosfun, unsigned dosdx, unsigned dosal);
程序例:

#include <stdio.h>
#include <dos.h>

/* Get current drive as 'A', 'B', ... */
char current_drive(void)
{
   char curdrive;

   /* Get current disk as 0, 1, ... */
   curdrive = bdos(0x19, 0, 0);
   return('A' + curdrive);
}

int main(void)
{
   printf("The current drive is %c:\n", current_drive());
   return 0;
}
  
  
  

函数名: bdosptr
功  能: DOS系统调用
用  法: int bdosptr(int dosfun, void *argument, unsigned dosal);
程序例:

#include <string.h>
#include <stdio.h>
#include <dir.h>
#include <dos.h>
#include <errno.h>
#include <stdlib.h>

#define  BUFLEN  80

int main(void)
{
   char  buffer[BUFLEN];
   int   test;

   printf("Enter full pathname of a directory\n");
   gets(buffer);

   test = bdosptr(0x3B,buffer,0);
      if(test)
      {
  printf("DOS error message: %d\n", errno);
  /* See errno.h for error listings */
  exit (1);
      }

   getcwd(buffer, BUFLEN);
   printf("The current directory is: %s\n", buffer);

   return 0;
}
  

3 楼

函数名: chdir
功  能: 改变工作目录
用  法: int chdir(const char *path);
程序例:

#include <stdio.h>
#include <stdlib.h>
#include <dir.h>

char old_dir[MAXDIR];
char new_dir[MAXDIR];

int main(void)
{
   if (getcurdir(0, old_dir))
   {
      perror("getcurdir()");
      exit(1);
   }
   printf("Current directory is: \\%s\n", old_dir);

   if (chdir("\\"))
   {
      perror("chdir()");
      exit(1);
   }

   if (getcurdir(0, new_dir))
   {
      perror("getcurdir()");
      exit(1);
   }
   printf("Current directory is now: \\%s\n", new_dir);

   printf("\nChanging back to orignal directory: \\%s\n", old_dir);
   if (chdir(old_dir))
   {
      perror("chdir()");
      exit(1);
   }

   return 0;
}
  
  

函数名: _chmod, chmod
功  能: 改变文件的访问方式
用  法: int chmod(const char *filename, int permiss);
程序例:

#include <sys\stat.h>
#include <stdio.h>
#include <io.h>

void make_read_only(char *filename);

int main(void)
{
   make_read_only("NOTEXIST.FIL");
   make_read_only("MYFILE.FIL");
   return 0;
}

void make_read_only(char *filename)
{
   int stat;

   stat = chmod(filename, S_IREAD);
   if (stat)
      printf("Couldn't make %s read-only\n", filename);
   else
      printf("Made %s read-only\n", filename);
}

4 楼

函数名: getcurdir
功  能: 取指定驱动器的当前目录
用  法: int getcurdir(int drive, char *direc);
程序例:

#include <dir.h>
#include <stdio.h>
#include <string.h>

char *current_directory(char *path)
{
   strcpy(path, "X:\\");      /* fill string with form of response: X:\ */
   path[0] = 'A' + getdisk();    /* replace X with current drive letter */
   getcurdir(0, path+3);  /* fill rest of string with current directory */
   return(path);
}

int main(void)
{
   char curdir[MAXPATH];

   current_directory(curdir);
   printf("The current directory is %s\n", curdir);

   return 0;
}
  
  

函数名: getcwd
功  能: 取当前工作目录
用  法: char *getcwd(char *buf, int n);
程序例:

#include <stdio.h>
#include <dir.h>

int main(void)
{
   char buffer[MAXPATH];

   getcwd(buffer, MAXPATH);
   printf("The current directory is: %s\n", buffer);
   return 0;
}

5 楼

函数名: getfat, getfatd
功  能: 取文件分配表信息
用  法: void getfat(int drive, struct fatinfo *fatblkp);
程序例:

#include <stdio.h>
#include <dos.h>

int main(void)
{
   struct fatinfo diskinfo;
   int flag = 0;

   printf("Please insert disk in drive A\n");
   getchar();

   getfat(1, &diskinfo);
/* get drive information */

   printf("\nDrive A: is ");
   switch((unsigned char) diskinfo.fi_fatid)
   {
      case 0xFD:
printf("360K low density\n");
break;

      case 0xF9:
printf("1.2 Meg high density\n");
break;

      default:
printf("unformatted\n");
flag = 1;
   }

   if (!flag)
   {
      printf("  sectors per cluster %5d\n",
       diskinfo.fi_sclus);
      printf("   number of clusters %5d\n",
       diskinfo.fi_nclus);
      printf("     bytes per sector %5d\n",
       diskinfo.fi_bysec);
   }

   return 0;
}

6 楼

函数名: parsfnm
功  能: 分析文件名
用  法: char *parsfnm (char *cmdline, struct fcb *fcbptr, int option);
程序例:

#include <process.h>
#include <string.h>
#include <stdio.h>
#include <dos.h>

int main(void)
{
   char line[80];
   struct fcb blk;

   /* get file name */
   printf("Enter drive and file name (no path - ie. a:file.dat)\n");
   gets(line);

   /* put file name in fcb */
   if (parsfnm(line, &blk, 1) == NULL)
      printf("Error in parsfm call\n");
   else
      printf("Drive #%d  Name: %11s\n", blk.fcb_drive, blk.fcb_name);

   return 0;
}

7 楼

函数名: searchpath
功  能: 搜索DOS路径
用  法: char *searchpath(char *filename);
程序例:

#include <stdio.h>
#include <dir.h>

int main(void)
{
   char *p;

   /* Looks for TLINK and returns a pointer
      to the path  */
   p = searchpath("TLINK.EXE");
   printf("Search for TLINK.EXE : %s\n", p);

   /* Looks for non-existent file  */
   p = searchpath("NOTEXIST.FIL");
   printf("Search for NOTEXIST.FIL : %s\n", p);

   return 0;
}
  

8 楼

函数名: setdisk
功  能: 设置当前磁盘驱动器
用  法: int setdisk(int drive);
程序例:

#include <stdio.h>
#include <dir.h>

int main(void)
{
   int save, disk, disks;

   /* save original drive */
   save = getdisk();

   /* print number of logic drives */
   disks = setdisk(save);
   printf("%d logical drives on the system\n\n", disks);

   /* print the drive letters available */
   printf("Available drives:\n");
   for (disk = 0;disk < 26;++disk)
   {
      setdisk(disk);
      if (disk == getdisk())
         printf("%c: drive is available\n", disk + 'a');
   }
   setdisk(save);

   return 0;
}

9 楼

函数名: system
功  能: 发出一个DOS命令
用  法: int system(char *command);
程序例:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
   printf("About to spawn command.com and run a DOS command\n");
   system("dir");
   return 0;
}
  

10 楼


[fly]有了这些应该够了吧,呵呵[/fly]

我来回复

您尚未登录,请登录后再回复。点此登录或注册