简易文件管理系统

合集下载

文件管理系统

文件管理系统

文件管理系统1.设计内容:模拟一个简单的文件管理系统。

实现下列功能:1)建立文件2)打开文件3)关闭文件4)删除文件5)建立目录6)显示目录内容2.设计思路:以一个真实的文件来模拟一块磁盘。

1)需自行定义的数据结构有:a.目录结构typedef struct{char name[3]; /*文件或目录名*/char type[2]; /*文件类型名*/char attribute; /*属性*/char address; /*文件或目录的起始盘块号*/char length; /*文件长度,以盘块为单位*/}content; /*目录结构*/b.已打开文件表的读写指针结构typedef struct{int dnum; /*磁盘盘块号*/int bnum; /*盘块内第几项*/}pointer; /*已打开文件表中读写指针的结构*/c.已打开文件表表项结构定义typedef struct{char name[20]; /*文件绝对路径名*/char attribute;/*文件的属性,用1个字节表示,所以用了char类型*/int number; /*文件起始盘块号*/int length; /*文件长度,文件占用的字节数*/int flag; /*操作类型,用"0"表示以读操作方式开文件,用"1"表示写操作方式打开文件*/ pointer read; /*读文件的位置,文件刚打开时dnum为文件起始盘块号,bnum为"0"*/ pointer write;/*写文件的位置,文件建立时dnum为文件起始盘块号,bnum为"0",打开时为文件末尾*/ }OFILE; /*已打开文件表项类型定义*/d.已打开文件表定义struct{OFILE file[n]; /*已打开文件表*/int length; /*已打开文件表中登记的文件数量*/}openfile; /*已打开文件表定义*/char buffer1[64];/*模拟缓冲1*/ //模拟磁盘上的物理块中存放的具体数据content buffer2[8];/*模拟缓冲2*/ //模拟磁盘上的物理块中存放的目录FILE *fc; /*模拟磁盘的文件指针*/2)需要设计的函数:a. sopen(char *name) 在已打开文件表中查找文件nameb. dopen(char *name) 在已打开文件表中删除文件namec. iopen(content *x) 在已打开文件表openfile数组中插入文件named. allocate( ) 分配一个磁盘块,返回块号。

简单文件管理系统

简单文件管理系统

数据结构课程设计题目:简单文件管理系统学生姓名:丁东伟,黄益辉,冯建豪学号:丁东伟201441402143,冯建豪201441402140,黄益辉201441402131 院(系):计算机学院专业班级:计算机科学与技术1班一、需求分析1General description 总体概述1.1About the Project 项目介绍这是一个简单商品分类管理系统,对商品进行分类管理.,主要功能:1、浏览当前商品分类目录的所有内容(子分类和当前目录下的商品)2、切换当前分类目录到上一级分类目录或下一级子分类目录(扩展,切换到任何一个目录)或直接切换到根目录3、在当前分类目录下添加新商品目录,或者添加新商品信息。

4、在当前目录下删除某个子商品分类或某个商品信息5、在当前目录下修改某个商品或分类目录的信息6、根据某个商品编号(或名称)在整个系统中查找某个商品并显示全部信息1.2Environment of Product 产品环境介绍本系统为Windows控制台应用程序,编程语言为C语言,在VC++6.0下编译。

1.3Software function 软件功能1.4User characteristics 用户特征本软件适合小型商场的商品分类,无年龄限制,用户需会使用键盘及鼠标。

2Specific Requirements 具体需求2.1到根目录1.介绍:转到文件目录的根目录;2.输入:CatalogNode* pCurrCatNode3.处理:将当前目录指针pCurrCatNode指向根目录root4.输出:true或者false2.2到子目录1.介绍:转到当前文件目录的子目录;2.输入:CatalogNode* pCurrCatNode3.处理:判断当前目录指针pCurrCatNode的子目录指针choiceCatalog是否为空,若为空返回false,否则返回true5.输出:true或者false2.3到父目录1.介绍:转到当前文件目录的父目录;2.输入:CatalogNode* pCurrCatNode3.处理:判断当前目录指针pCurrCatNode的父目录指针fatherCatalogNode是否为空,若为空返回false,否则返回true4.输出:true或者false2.4添加目录1.介绍:在当前文件目录下添加一个新的子目录;2.输入:CatalogNode* currCatalogNode,CatalogNode* catNode3.处理:输入新目录名、创建年月日,调用目录添加函数addCatalog_fun(),若添加成功则返回true,否则返回false4.输出:true或者false2.5修改目录1.介绍:修改当前目录下的一个子目录;2.输入:CatalogNode* currCatalogNode,CatalogNode* catNode3.处理:选择目录序号,修改所选目录的名称。

文件管理系统

文件管理系统

文件管理系统1. 引言文件管理系统是指对文件进行组织、存储、检索和管理的工具或软件。

它可以帮助用户高效地管理各种类型的文件,提供便捷的操作方式和灵活的文件管理功能。

本文将介绍文件管理系统的基本概念、特点、功能以及使用方法。

2. 概述文件管理系统是计算机领域中的一个重要概念,它是指对文件进行组织、存储、检索和管理的工具或软件。

文件管理系统的主要目标是提供一个可靠且高效的方式来管理文件,使用户可以方便地创建、编辑、存储、复制、删除和查找文件。

3. 特点文件管理系统具有以下几个特点:•可靠性:文件管理系统应具有数据完整性和可靠性,能够确保文件在存储和操作过程中不丢失或损坏。

•灵活性:文件管理系统应提供灵活的文件组织方式,用户可以自由地创建文件夹、子文件夹,进行文件的分类和整理。

•安全性:文件管理系统应提供安全的文件访问控制机制,用户可以设置文件的权限和访问级别,保护文件的机密性和私密性。

•高效性:文件管理系统应具有高效的文件存储和检索功能,用户可以快速地找到需要的文件,并进行操作和编辑。

•扩展性:文件管理系统应具有良好的扩展性,能够适应不同规模和需求的文件管理。

4. 功能文件管理系统通常具有以下基本功能:•文件创建与编辑:用户可以创建新的文件,并进行编辑和保存。

•文件存储与组织:文件管理系统提供文件存储功能,用户可以将文件放置在不同的文件夹中进行组织和管理。

•文件复制与移动:用户可以复制或移动文件到不同的文件夹中,方便文件的整理和归档。

•文件删除与恢复:用户可以删除文件,并在需要时进行恢复操作,防止误删文件。

•文件检索与查找:用户可以通过文件名、关键字或其他属性进行文件检索和查找,快速找到需要的文件。

•文件分享与协作:用户可以将文件分享给其他用户,实现文件的共享和协作,提高团队工作效率。

•文件备份与恢复:文件管理系统可以对文件进行定期备份,并在需要时进行恢复,确保文件的安全性和可靠性。

5. 使用方法文件管理系统的使用方法根据具体的软件或工具而有所区别,通常包括以下几个步骤:1.安装文件管理系统:根据软件提供的安装步骤,将文件管理系统安装到计算机或服务器上。

模拟一个简单二级文件管理系统

模拟一个简单二级文件管理系统

模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

设计内容:模拟一个简单二级文件管理系统一、实验内容描述1 实验目标本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现.2 实验要求为DOS系统设计一个简单的二级文件系统.要求做到以下几点:①可以实现下列命令:login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件②列目录时要列出文件名、物理地址、保护码和文件长度.③源文件可以进行读写保护.二、程序主要内容1设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统.在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容.2 数据结构file结构体系统文件数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式0.只读;1.可写;2.可读写;3.保护、fname[]char,文件名;filemode结构体文件状态数据结构:isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式0.只读;1.可写;2.可读写;3.初始化;user结构体用户信息数据结构:uname[]char,用户名、upassword[]char,用户密码;userfile结构体用户文件数据结构:uname[]char,用户名、ufile[]file,用户拥有的文件数组.代码:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <string.h>#define MaxUser 100 //定义最大MDF主目录文件#define MaxDisk 512*1024 //模拟最大磁盘空间#define commandAmount 12 //对文件操作的指令数//存储空间管理有关结构体和变量char disk[MaxDisk]; //模拟512K的磁盘存储空间typedef struct distTable //磁盘块结构体{int maxlength;int start;int useFlag;distTable *next;}diskNode;diskNode *diskHead;struct fileTable //文件块结构体{char fileName[10];int strat; //文件在磁盘存储空间的起始地址int length; //文件内容长度int maxlength; //文件的最大长度char fileKind[3]; //文件的属性——读写方式struct tm *timeinfo;bool openFlag; //判断是否有进程打开了该文件//fileTable *next;};//两级目录结构体typedef struct user_file_directory //用户文件目录文件UFD {//char fileName[10];fileTable *file;user_file_directory *next;}UFD;//UFD *headFile;typedef struct master_file_directory //主文件目录MFD{char userName[10];char password[10];UFD *user;}MFD;MFD userTable[MaxUser];int used=0; //定义MFD目录中用已有的用户数//文件管理void fileCreate(char fileName[],int length,char fileKind[]); //创建文件void fileWrite(char fileName[]); //写文件void fileCat(char fileName[]); //读文件void fileRen(char fileName[],char rename[]); //重命名文件void fileFine(char fileName[]); //查询文件void fileDir(char UserName[]); //显示某一用户的所有文件void fileClose(char fileName[]); //关闭已打开的文件void fileDel(char fileName[]); //删除文件void chmod(char fileName[],char kind[]); //修改文件的读写方式int requestDist(int &startPostion,int maxLength); //磁盘分配查询void initDisk(); //初始化磁盘void freeDisk(int startPostion); //磁盘空间释放void diskShow(); //显示磁盘使用情况//用户管理void userCreate();int login();int userID=-1; //用户登录的ID号,值为-1时表示没有用户登录int main(){char order[commandAmount][10];strcpy(order[0],"create");strcpy(order[1],"rm");strcpy(order[2],"cat");strcpy(order[3],"write");strcpy(order[4],"fine");strcpy(order[5],"chmod");strcpy(order[6],"ren");strcpy(order[7],"dir");strcpy(order[8],"close");strcpy(order[9],"return");strcpy(order[10],"exit");strcpy(order[11],"df");charcommand[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];int i,k,j;int length;initDisk(); //初始化磁盘for(i=0;i<MaxUser;i++) //初始化用户UFD目录文件的头指针{userTable[i].user=(UFD *)malloc(sizeof(UFD));userTable[i].user->next=NULL;}while(1){printf("********************************************\n");printf(" 1、Creat user\n");printf(" 2、login\n");printf("********************************************\n");printf("Please chooce the function key:>");int choice;scanf("%d",&choice);if(choice==1) userCreate();else if(choice==2) userID=login();else printf("您的输入有误,请重新选择\n");while(userID!=-1){fflush(stdin);printf("———————————————————————————————————————\n");printf(" create-创建格式:create a1 1000 rw,将创建名为a1,长度为1000字节可读可写的文件\n");printf(" rm-删除格式:rm a1,将删除名为a1的文件\n");printf(" cat-查看文件内容格式:cat a1,显示a1的内容\n");printf(" write-写入格式:write a1\n");printf(" fine-查询格式:fine a1 ,将显示文件a1的属性\n");printf(" chmod-修改格式:chmod a1 r,将文件a1的权限改为只读方式\n");printf(" ren-重命名格式:ren a1 b1 ,将a1改名为b1\n");printf(" dir-显示文件格式:dir aaa,将显示aaa用户的所有文件\n");printf(" df-显示磁盘空间使用情况格式:df\n");printf(" close-关闭文件格式:close a1,将关闭文件a1\n");printf(" return-退出用户,返回登录界面\n");printf(" exit-退出程序\n");printf("————————————————————————————————————————\n");printf("please imput your command:>");gets(command);int select;for(i=0;command[i]!=' '&&command[i]!='\0';i++) //command_str1字符串存储命令的操作类型command_str1[i]=command[i];k=i;command_str1[k]='\0';for(i=0;i<commandAmount;i++){if(!strcmp(command_str1,order[i])){select=i;break;}}if(i==commandAmount){printf("您输入的命令有误,请重新输入\n");continue;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++) //commmand_str2字符串存储文件名或用户名command_str2[k]=command[i];command_str2[k]='\0';k=i;switch(select){case 0:for(i=k+1,k=0;command[i]!=' ';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';k=i;j=1;length=0; //初始化文件长度for(i=strlen(command_str3)-1;i>=0;i--) //把字符串转换为十进制{length+=(command_str3[i]-48)*j;j*=10;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str4[k]=command[i];command_str4[k]='\0';fileCreate(command_str2,length,command_str4);break;case 1:fileDel(command_str2);break;case 2:fileCat(command_str2);break;case 3:fileWrite(command_str2);break;case 4:fileFine(command_str2);break;case 5:for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';chmod(command_str2,command_str3);break;case 6:for(i=k+1,k=0;command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';fileRen(command_str2,command_str3);break;case 7:fileDir(command_str2);break;case 8:fileClose(command_str2);break;case 9:UFD *p;for(p=userTable[userID].user->next;p!=NULL;p=p->next) //退出用户之前关闭所有打的文件if(p->file->openFlag)p->file->openFlag=false;system("cls");userID=-1;break;case 10:exit(0);break;case 11:diskShow();break;}}}return 0;}void userCreate(){char c;char userName[10];int i;if(used<MaxUser){printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elseuserName[i]=c;printf("%c",c);}userName[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,userName)){printf("\n");printf("该用户名已存在,创建用户失败\n");system("pause");return;}}strcpy(userTable[used].userName,userName);printf("\n");printf("请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elseuserTable[used].password[i]=c;printf("*");}userTable[userID].password[i]='\0';printf("\n");printf("创建用户成功\n");used++;system("pause");}else{printf("创建用户失败,用户已达到上限\n");system("pause");}fflush(stdin);}int login(){char name[10],psw[10];char c;int i,times;printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elsename[i]=c;printf("%c",c);}name[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,name))break;}if(i==used){printf("\n您输入的用户名不存在\n");system("pause");return -1;}for(times=0;times<3;times++){memset(psw,'\0',sizeof(psw));printf("\n请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elsepsw[i]=c;printf("*");}printf("\n");for(i=0;i<used;i++){if(!strcmp(psw,userTable[i].password)){printf("用户登录成功\n");system("pause");break;}}if(i==used){printf("您输入的密码错误,您还有%d次输入机会\n",2-times);if(times==2) exit(0);}else break;}fflush(stdin);return i;}void initDisk(){diskHead=(diskNode *)malloc(sizeof(diskNode));diskHead->maxlength=MaxDisk;diskHead->useFlag=0;diskHead->start=0;diskHead->next=NULL;}int requestDist(int &startPostion,int maxLength){int flag=0; //标记是否分配成功diskNode *p,*q,*temp;p=diskHead;while(p){if(p->useFlag==0&&p->maxlength>maxLength){startPostion=p->start;q=(diskNode *)malloc(sizeof(diskNode));q->start=p->start;q->maxlength=maxLength;q->useFlag=1;q->next=NULL;diskHead->start=p->start+maxLength;diskHead->maxlength=p->maxlength-maxLength;flag=1;temp=p;if(diskHead->next==NULL) diskHead->next=q;else{while(temp->next) temp=temp->next;temp->next=q;}break;}p=p->next;}return flag;}void fileCreate(char fileName[],int length,char fileKind[]){//int i,j;time_t rawtime;int startPos;UFD *fileNode,*p;for(p=userTable[userID].user->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName)){printf("文件重名,创建文件失败\n");system("pause");return;}}if(requestDist(startPos,length)){fileNode=(UFD *)malloc(sizeof(UFD));fileNode->file=(fileTable *)malloc(sizeof(fileTable)); //这一步必不可少,因为fileNode里面的指针也需要申请地址,否则fileNode->file指向会出错strcpy(fileNode->file->fileName,fileName);strcpy(fileNode->file->fileKind,fileKind);fileNode->file->maxlength=length;fileNode->file->strat=startPos;fileNode->file->openFlag=false;time(&rawtime);fileNode->file->timeinfo=localtime(&rawtime);fileNode->next=NULL;if(userTable[userID].user->next==NULL)userTable[userID].user->next=fileNode;else{p=userTable[userID].user->next;while(p->next) p=p->next;p->next=fileNode;}printf("创建文件成功\n");system("pause");}{printf("磁盘空间已满或所创建文件超出磁盘空闲容量,磁盘空间分配失败\n");system("pause");}}void freeDisk(int startPostion){diskNode *p;for(p=diskHead;p!=NULL;p=p->next){if(p->start==startPostion)break;}p->useFlag=false;}void fileDel(char fileName[]){UFD *p,*q,*temp;q=userTable[userID].user;p=q->next;while(p){if(!strcmp(p->file->fileName,fileName)) break;else{p=p->next;q=q->next;}}if(p){if(p->file->openFlag!=true) //先判断是否有进程打开该文件{temp=p;q->next=p->next;freeDisk(temp->file->strat); //磁盘空间回收free(temp);printf("文件删除成功\n");system("pause");}elseprintf("该文件已被进程打开,删除失败\n");system("pause");}}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileCat(char fileName[]){int startPos,length;int k=0;UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){startPos=p->file->strat;length=p->file->length;p->file->openFlag=true; //文件打开标记printf("*****************************************************\n");for(int i=startPos;k<length;i++,k++){if(i%50==0) printf("\n"); //一行大于50个字符换行printf("%c",disk[i]);}printf("\n\n*****************************************************\n");printf("%s已被read进程打开,请用close命令将其关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileWrite(char fileName[]){UFD *p,*q;q=userTable[userID].user;int i,k,startPos;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){if(!strcmp(p->file->fileKind,"r")) //判断文件类型{printf("该文件是只读文件,写入失败\n");system("pause");return;}char str[500];printf("please input content:\n");gets(str);startPos=p->file->strat;p->file->openFlag=true; //文件打开标记p->file->length=strlen(str);if(p->file->length>p->file->maxlength){printf("写入字符串长度大于该文件的总长度,写入失败\n");system("pause");return;}for(i=startPos,k=0;k<(int)strlen(str);i++,k++)disk[i]=str[k];printf("文件写入成功,请用close命令将该文件关闭\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileFine(char fileName[])UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){printf("********************************************\n");printf("文件名:%s\n",p->file->fileName);printf("文件长度:%d\n",p->file->maxlength);printf("文件在存储空间的起始地址:%d\n",p->file->strat);printf("文件类型:%s\n",p->file->fileKind);printf("创建时间:%s\n",asctime(p->file->timeinfo));printf("********************************************\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void chmod(char fileName[],char kind[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){strcpy(p->file->fileKind,kind);printf("修改文件类型成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileRen(char fileName[],char name[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){while(q->next){if(!strcmp(q->next->file->fileName,name)){printf("您输入的文件名已存在,重命名失败\n");system("pause");return;}q=q->next;}strcpy(p->file->fileName,name);printf("重命名成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileDir(char userName[]){UFD *p;int i,k;for(i=0;i<MaxUser;i++){if(!strcmp(userTable[i].userName,userName)){k=i;break;}}if(i==MaxUser){printf("没有找到该用户,请检查输入用户名是否正确\n");system("pause");return;}else{p=userTable[k].user->next;printf("************************************************************************* *******\n");printf("文件名文件长度文件在磁盘的起始地址文件类型创建时间\n");for(;p!=NULL;p=p->next)printf("%s %d %d %s %s",p->file->fileName, p->file->maxlength,p->file->strat,p->file->fileKind,asctime(p->file->timeinfo));printf("************************************************************************* *******\n");system("pause");}}void diskShow(){diskNode *p;int i=0,unusedDisk=0;printf("************************************************************************* **\n");printf(" 盘块号起始地址容量(bit) 是否已被使用\n");for(p=diskHead;p!=NULL;p=p->next,i++){if(p->useFlag==false) unusedDisk+=p->maxlength;printf(" %d %d %d %d \n",i,p->start,p->maxlength,p->useFlag);}printf("************************************************************************* **\n");printf("磁盘空间总容量:512*1024bit 已使用:%dbit 末使用:%dbit\n\n",MaxDisk-unusedDisk,unusedDisk);system("pause");}void fileClose(char fileName[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){p->file->openFlag=false;printf("%s文件已关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}运行结果视图:。

文件管理系统介绍

文件管理系统介绍

文件管理系统介绍文件管理系统是一种用于有效组织和管理文件的工具。

它提供了一个集中的平台,可以存储、查找和共享文件。

本文将介绍文件管理系统的主要功能和优势。

主要功能文件管理系统通常具有以下主要功能:1. 文件存储:系统提供安全的文件存储空间,可以存储各种类型的文件,如文档、图片和音频文件。

2. 文件索引:系统会自动为每个文件创建索引,使用户可以根据文件的标题、标签或关键词快速查找到所需文件。

4. 版本控制:系统会跟踪文件的历史版本,并允许用户比较、恢复或还原之前的版本。

这有助于防止文件丢失或意外更改。

5. 文件备份和恢复:系统会定期备份文件,并提供恢复功能,以防止文件丢失或损坏。

6. 安全性和权限:系统提供安全的访问控制,确保只有授权用户可以访问文件。

管理员可以设置不同用户的权限级别,以控制他们对文件的操作权限。

优势文件管理系统具有许多优势,包括:1. 提高工作效率:通过快速查找和共享文件,文件管理系统可以显著提高工作效率。

不再花费宝贵的时间在繁琐的文件管理任务上。

2. 促进协作和团队工作:通过文件共享和协作功能,团队成员可以轻松地共享和合作编辑文件,促进了协作和团队工作。

3. 提供安全性和保密性:文件管理系统提供了安全的存储和访问控制,确保文件的安全性和保密性。

只有授权用户才能访问敏感文件。

4. 减少纸质文件:文件管理系统可以帮助组织减少对纸质文件的依赖,实现更环保和可持续的办公环境。

5. 提供历史记录和审计功能:通过版本控制和文件操作日志,文件管理系统可以提供审计功能,记录文件的变更历史和操作记录。

综上所述,文件管理系统是一个有助于组织和管理文件的强大工具。

它的功能和优势可以提高工作效率,促进协作,同时确保文件的安全性和保密性。

如果您正在寻找一个可靠的文件管理解决方案,那么文件管理系统将是一个不错的选择。

请注意,以上内容仅供参考,具体的文件管理系统可能会有不同的功能和特点。

文件管理系统方案---原本

文件管理系统方案---原本

1.1.安全网络硬盘需求分析1、对个人文件集中存储保护需求随着各单位信息化程度提高,各部门存在大量的文档数据,为保证各个科室的数据的安全,防止数据丢失、损坏、泄密、感染病毒,可以对数据进行集中存储,备份,并进行加密,保密,实现数据的集中安全存储,真正做到有备无患。

信息的泄密造成了潜在威胁:2、数据信息的共享保护需求目前,大部分单位数据资源充分利用率不高,缺乏统一的整合利用,没有形成知识仓库,各部门的资源无法共享,一方面造成资源的浪费,另一方面有时会造成信息比较滞后、陈旧,而且由于电子邮件技术体系的问题,只能传送较小容量的数据,在日常工作中往往需要传送几十甚至上百兆的数据,只能通过硬盘、光盘、U盘等介质进行迁移,但涉及到物理介质的迁移必然导致不方便和不安全,同时部门之间大数据量信息的共享,以前主要通过网络邻居或者简单文件服务器进行共享,这种网络模式对数据存在较大的安全隐患,安全机制非常脆弱,且由于文件服务器受超级用户等机制影响,非常容易泄密,因此,解决这些问题的关键是要建立一个统一安全的信息交换平台和管理中心,进行资源共享。

安全网络硬盘系统提供了一种可控、安全、方便和快速的可控共享机制,用户A共享给用户B的数据只有用户B可以看到,管理员和其它用户均无法偷窥,采用共享方式、直接调用等机制实现大文件的调用和迁移,解决了设计稿件、多媒体等数据的共享和迁移,保证了数据的高可靠性,加强了数据的可用性。

3、个人文件的安全备份保护需求用户的日常工作文件数据比较多,目前大部分是存在终端本地硬盘或者文件服务器中,同时由于对终端数据没有备份,或者备份有限,比如以U盘或者移动硬盘备份,介质不安全、容易损坏、较易感染病毒或者泄密,而且是属于冷备份,备份不及时、麻烦,如果硬盘损坏或系统崩溃造成数据丢失,则造成不可估量的损失。

因此,可以根据单位或者个人情况不同,在安全网络硬盘系统上设置相应的空间以及设置不同的权限,在每个电脑上,安装自动备份引擎,设置相应的存储任务,备份引擎将会自动定时将相应目录下资料自动拷入安全网络硬盘系统,实现了数据的异地备份,保证数据的安全。

文档管理系统方案

文档管理系统方案

文档管理系统方案文档管理系统方案:为企业打造高效、便捷的文档管理平台随着企业业务的快速发展,文档资料的数量和种类不断增加,如何高效、有序地进行文档管理成为了企业面临的难题。

本文将介绍文档管理系统的构建方案,包括系统的主题、收集信息、需求分析、模型设计、编码实现、测试验证和优化改进等方面。

一、确定主题文档管理系统的主题是管理企业各类文档,包括文件、合同、规章制度、技术文档等,实现文档的存储、分类、检索、共享和权限控制等功能。

该系统的目标是为企业提供一个高效、便捷的文档管理平台,提高文档利用率和降低管理成本。

二、收集信息在确定主题后,我们需要收集相关信息,包括市场需求、用户痛点、竞争对手等。

通过调研和分析,我们发现市场上对文档管理系统的需求主要集中在以下几个方面:1、安全性:保障文档的保密性和完整性,确保只有授权用户能够访问和操作相关文档。

2、便捷性:提供快速、方便的文档检索和操作功能,提高工作效率。

3、可追溯性:实现文档的版本控制和历史记录追踪,方便用户跟踪文档的修改历史。

4、分类管理:支持按照文档类型、部门、项目等不同维度对文档进行分类管理,方便用户查找和管理相关文档。

三、需求分析在收集信息的基础上,我们对用户需求进行了深入分析,将系统需要实现的功能和特点归纳如下:1、用户管理:包括用户注册、登录、权限分配等功能。

2、文档存储:支持多种文件格式的存储,并提供文件大小限制和存储空间管理功能。

3、文档检索:支持按照关键词、文件名、内容等不同条件进行检索,并提供高级检索功能。

4、文档操作:支持文档的上传、下载、复制、移动、删除等操作。

5、文档分类:支持按照不同的分类标准对文档进行分类,并支持自定义分类。

6、权限管理:支持对不同用户进行不同的权限分配,确保文档的安全性。

7、版本控制:支持对文档进行版本控制,记录文档的修改历史。

8、统计分析:支持对文档的存储情况、使用情况等进行统计分析,为管理层提供决策支持。

简单文件管理系统

简单文件管理系统

目录一、题目和要求 (1)二、相关原理分析和总的设计思想 (2)三、数据结构和流程图 (4)四、源程序 (6)五、运行结果 (17)六、自我评析与总结 (24)一、题目和要求(1) 题目:简单文件管理系统的设计及实现(2) 要求:根据文件系统的相关原理,设计并用C或C++编程实现一个类似Windows系统中“我的电脑”功能的文件管理系统,该文件系统可以对系统中所有文件进行管理,同时具有创建新文件、删除文件、复制文件、创建文件夹等功能。

二、相关原理分析和总的设计思想基于MFC AppWizard框架的程序定制一个菜单,有添加四个子菜单,创建,复制,删除,退出,在前三个子菜单中添加四个菜单项,文件夹,TXT,WORD,EXCEL。

每个菜单项对应着一种功能。

且复制选择路径都是基于对话框,操作方便,简洁明了。

○1创建文件夹;要创建文件夹,首先要选择文件夹创建的位置,可以用到浏览文件夹的函数SHBrowseForFolder和两个结构BROWSEINFO和ITEMIDLIST,要想得到文件夹路径可以用SHGetPathFromIDList,当然程序要想拥有建立文件夹的功能,应该设置BROWSEINFO对象的ulFlags的参数有 BIF_NEWDIALOGSTYLE ;○2创建文件;不管是创建txt文件,word文件,excel文件原理都一样。

可以写一个build函数,提供几个参数:标题title, 路径filter,扩展名defExt。

这样创建文件时,可以根据标题,路径,扩展名的不同调用build函数,达到不同功能的目的在build函数体中使用CFileDialog定义一个对象来创建文件。

○3复制文件夹;第一步:复制文件夹可以在一个对话框中完成,这样必然需要添加一个类CCopyDlg。

第二步:在该对话框上设置两个按钮,一个按钮来选择源文件夹,保存源文件路径;一个按钮来选择目标文件夹,保存目标文件路径。

选择路径的方法可以与步骤○1的方法相同。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
system
数据结构
• Boot_BLK: 引导块 :包括可用Inode,data block 的个数 • Super_BLK:基本块大小,根inode位置 • Inode:文件名、块位置、块个数、创建时间、 文件大小 • Dir:目录名、文件名、索引节点号…. • Open_file_table:维护打开的文件的表 • N_file:一般文件:文件路径、内容、文件名
• 类似删除普通文件 • 只不过不用事先关文件
查看目录 void lookdir(char* str)
• 查看目录下的所有文件,包括子目录与普 通文件并打印出所有文件名 • 查看有没有该目录 • 注意1076行,这里就直接调用findBLKs,直 接得到了要找的目录的inode_num与块数组。 • 之后把目录取出来打印即可
• Mode=1 删除普通文件 mode=2删除目录 • 普通和目录的区别:删除前是否要关闭这 个文件 • 删除目录的话目录里的东西也都找不到了 • 判断有没有 • 更新引导块和位图 • 889-921行 得到直接父目录 • 从父目录中删除目录项dir_del
写文件 void writeNFile(char* str,char* cont)
复制文件 void copyFile(char* dest,char* str)
• 把str路径的文件复制到dest路径的文件中 • 把str路径的文件读出来,放到缓冲区 • 调用createfile创建即可 • 不一定要和本系统在同一个文件夹,电脑 的任何一个位置的文件都可以复制,如 d:/test.txt
exit
• 不解释
ห้องสมุดไป่ตู้
创建目录文件 void CreateDir(char* str)
• 解析地址
• 根据绝对路径逐层查找,直到其直接父目 录 • 调用PUT_DIR把要创建的d0目录找到合适的 块放进去,并返回Inode_num • 更新其直接父目录,插入目录项,并将父 目录写回
删除目录 delFile() mode=2
所有操作的前戏(int main中)
• FILE* apply_room(char *sys_name) • 创建磁盘并返回指针 • 里面有一些函数access,fseek等自己查一下
• 如果是新的(isnew=true) • Init() • 初始化引导块、超级块、两个位图、目录 全局变量d0
int* findBLK(char* str,int* inum)
• 找到绝对路径为str的文件所占的块号,把 这些块号放到一个数组里,返回这个数组, 并且在这个过程中把inum赋值为该文件的 inode号
• 中间函数,方便查找一个文件的。
创建文件操作 void CreateFile(char* str,char* cont)
• int split(char dst[][80], char* str, const char* spl):把绝 对路径str以分隔符spl分隔,并把各部分存到dst • 解析绝对路径、判断文件名长度 • 692-730行 一层一层地找目录 最终找到直接的父目 录 • PUT_NFILE:找到合适位置与个数的块,更新位图, 把全局变量n_file放进去,并返回其inode号 • 把上边得到的inode号与文件名插入直接父目录 (dir_insert函数),并将更新完的父目录写回()
位图
• • • • • Data block bitmap:640个文件 640位 80字节 80个元素的char数组 Inode bitmap:80个Inode,10字节 10个元素的char数组 但实际上我们人类直观认识上char[640]和char[80]是 更好理解的,因此我们在程序中也是使用这种更好 理解的方式来操作 • 要这样的话就需要一个转换函数,把char[640]转变 成char[80],char[80]转变成char[10],以及反向转换 • Bit2char():80->640 char2bit():640->80 • 例如使用了1、2inode,那么位图中的第一个char的 Ascii码应为00000011,之后通过(char)3来实现赋值
全局变量
• File *f : 模拟磁盘 • Bool isnew:该磁盘是新建的还是已存在的 • 各数据结构都有一个全局变量
基本函数
• void GET_BLK(void* buf,int blk_no,int size) • 获得块号为blk_no的大小为size字节的内容存 到buf中, • void PUT_BLK(void* buf,int blk_no) • 把buf中的数据放到blk_no的块中 • 值得注意:GET要有size,否则会把整个块的数 据都GET到,buf可能会爆掉,影响其他变量, 出现未知错误。
打开文件 void openfile(char* filename)
• 有没有 • 打没打开 • 更新全局的table
关闭文件 void closefile(char* filename)
• 有没有 • 打没打开 • 更新
删除文件 void delFile(char* str,int mode)
• • • • • 有没有 打没打开 删除文件delfile() mode=1 创建新文件,文件名和内容为上面的参数 打开文件
读文件 void readFile(char* str)
• 判断有没有 • 判断打没打开 • 解析地址后逐层去找,直到找到这个文件 的inode,从而找到这个文件占哪些块,分 别读出内容 • 注:实际上这里复杂了,findBLK直接就可 以返回块号,实际上没必要下边写一堆代 码自己去找的…
相关文档
最新文档