VC374 C语言文件系统设计
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
文件系统设计
1.文件系统
①下列几条命令
LOGIN 用户登陆
DIR 列文件目录
CREATE 创建文件
DELETE 删除文件
OPEN 打开文件
CLOSE 关闭文件
READ 读文件
WRITE 写文件
②列目录时要列出文件名,物理地址,保护码和文件长度。
③源文件可以进行读写保护。
①首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
程序见下(本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录):
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "stdlib.h"
#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/
#define MAXCHILD 50 /*the largest child*/
#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ think58
typedef struct /*the structure of OSFILE*/
{int fpaddr; /*file physical address*/
int flength; /*file length*/
int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/
char fname[MAXNAME]; /*file name*/
} OSFILE; think58.com
void ReadF() /*Read File*/
{int i,k,n=0;
char fname[MAXNAME];
char str[255],str1[255],c;
char *rtrim(char *str); /*remove the trailing blanks.*/
char *ltrim(char *str); /*remove the heading blanks.*/
int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/
int ExistD(char *dirname);
if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError.Please convert to ufd dir before read.\n");wgetchar=1;return;}
printf("\nCaution:Open file first\n");
printf("Opened File(s) List:\n");
k=ExistD(dirname);
for(i=0;i<fcount[k];i++)
{if (ifopen[k][i].ifopen==1)
if ((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}
if((n%4==0)&&(n!=0)) printf("\n");
}
printf("\n%d files openned.\n",n);
if (n==0) wgetchar=1;
if(n!=0)
{printf("\nPlease input FileName:"); think58.com [来源:http://think58.com]
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if(i>=0)
{if(ifopen[k][i].ifopen==1)
{if((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2))
{itoa(ufd[k]->ufdfile[i].fpaddr,str,10);
strcpy(str1,"file");
strcat(str1,str);
strcpy(str,"c:\\osfile\\file\\");
strcat(str,str1);
fp_file=fopen(str,"rb");
think58.com