主题:驱动器问题???
cache2002
[专家分:30] 发布于 2002-12-20 11:04:00
我在TC编程中需要对驱动器及目录文件进行处理,但最古老的C怎样实现我就不清楚了。我 要进行的工作是把取出分区的总数,置驱动工器为哪一个分区,显示当前目录下的所有文件,还有文件的扩展名,或选取其中扩展名一定的所有文件。最后还有一个格式化驱动器的问题。请高手赐教。感恩不尽!!
回复列表 (共13个回复)
沙发
lanjingquan [专家分:510] 发布于 2002-12-20 12:16:00
函数名: 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;
}
板凳
lanjingquan [专家分:510] 发布于 2002-12-20 12:17:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:18:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:19:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:25:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:26:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:27:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:27:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:29:00
函数名: 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 楼
lanjingquan [专家分:510] 发布于 2002-12-20 12:31:00
[fly]有了这些应该够了吧,呵呵[/fly]
我来回复