linux二级文件管理系统.docx_第1页
linux二级文件管理系统.docx_第2页
linux二级文件管理系统.docx_第3页
linux二级文件管理系统.docx_第4页
linux二级文件管理系统.docx_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计报告班 级:*学 号:*姓 名:*指 导 老 师:*设 计 题 目:二级文件管理系统日 期:2013年1月摘要:本系统是基于linux平台运行在终端上的虚拟二级文件管理系统。模拟真正的文件管理系统,并采用用户登录机制对文件和文件夹进行创建,修改,删除的操作。对于文件夹而言,可以进行创建删除的操作;对于文件而言,可以创建,修改,删除。删除文件夹时,同时删除相应文件夹下的文件。采用用户登录使得用户管理文件更方便,并形成了二级的文件管理模式。关键词:用户登录,文件管理。一.设计任务1.1设计任务虚拟二级文件管理系统,采用用户登录机制,可以查看文件信息,管理文件及文件夹。二.设计方案 2.1系统总体设计方案2.1.1功能设计1.使用如下命令对文件和文件夹进行管理dir : 列出所有文件信息cd - : 列出文件夹下的文件和子文件夹cfile : 创建新文件cfloder :创建新文件夹 read :读文件内容 write :重写文件内容 deli :删除文件 delo : 删除文件夹,若有子文件,一并删除 exit :退出系统2.创建新用户2.1.2结构设计本系统基于linux平台,采用过程性语言C语言实现,使用结构体表现如下数据结构。1.用户数据名称数据类型数据长度userNamechar20pwdchar10struct userchar name20;char pwd10;/struct folder *userFolder;firstUserMAXUSER;2.文件夹数据名称数据类型数据长度关联数据folderNamechar10无folderOwnerchar20user.userNameparentFolderchar10folderNamenext*foldersizeof(folder)folderstruct folderchar folderOwnerFname;/所属用户char parentFolderFname;char folderNameFname;/文件夹名称struct folder *next;3.文件数据名称数据类型数据长度关联数据fileNamechar10无filefolderchar10folderNamefileLengthint无无fileContentchar1024无next*filesizeof(file)filestruct filechar fileNameFname;int fileLength;char fileFolderFname;char fContentFLENGTH;struct file *next;2.1.3实现算法设计char* login();/用户登录函数void createUser(); /创建新用户void writefile(char,char);/向文件中存入信息:用户信息 或文件信息void writefile1(char,char,char);void init();/初始化char*v(char,char,char); /字符串处理函数 截取字符串中的一部分char* ReplaceString(const char*,const char*,const char*);char* readfile(char);/从文件中读取数据void createFile(char,struct file*);/创建文件所属文件夹,链表void createFolder(char,struct folder*,char);/创建文件夹 所属用户struct file* initFile();/初始化文件struct folder* initFolder();/初始化文件夹void deleteFile(char,char);/参数为文件名,文件夹名void deleteFolder(char,char);void function(char);/参数为当前用户名void dirFile();/列出文件信息void dirFolder(char);三.实现原理3.1数据实现3.1.1用户本系统最大用户数量为5,将用户信息保存在文件user中,通过init()函数将用户信息赋给user数组。3.1.2文件夹设定头指针,在保存文件夹信息的文件folder中读取数据,通过initFloder()赋值给文件夹链表。3.1.3文件与文件夹类似,在保存文件信息的文件file中读取数据,通过initFile()赋值给文件链表。3.2功能实现通过对文件夹链表和文件链表的处理,保存在file和folder文件中,以实现文件的存储以及其他的功能。具体功能实现请看具体实现代码。四.具体实现代码如下:#include#include#include#include#include#include#include#define LENGTH 1024#define MAXUSER 5#define FLENGTH 1024#define Fname 10#define LEN sizeof(struct file)int countUser;char str3000;char name20;char *rep = NULL;struct userchar name20;char pwd10;/struct folder *userFolder;firstUserMAXUSER;struct filechar fileNameFname;int fileLength;char fileFolderFname;char fContentFLENGTH;struct file *next;struct folderchar folderOwnerFname;/所属用户char parentFolderFname;char folderNameFname;/文件夹名称struct folder *next;int ReplaceStr(char *sSrc, char *sMatchStr, char *sReplaceStr) int StringLen; char caNewStringLENGTH; char *FindPos = strstr(sSrc, sMatchStr); if( (!FindPos) | (!sMatchStr) ) return -1; while( FindPos ) memset(caNewString, 0, sizeof(caNewString); StringLen = FindPos - sSrc; strncpy(caNewString, sSrc, StringLen); strcat(caNewString, sReplaceStr); strcat(caNewString, FindPos + strlen(sMatchStr); strcpy(sSrc, caNewString); FindPos = strstr(sSrc, sMatchStr); return 0;char* login();/用户登录函数void createUser(); /创建新用户void writefile(char,char);/向文件中存入信息:用户信息 或文件信息void writefile1(char,char,char);void init();/初始化char*v(char,char,char); /字符串处理函数 截取字符串中的一部分char* ReplaceString(const char*,const char*,const char*);char* readfile(char);/从文件中读取数据void createFile(char,struct file*);/创建文件所属文件夹,链表void createFolder(char,struct folder*,char);/创建文件夹 所属用户struct file* initFile();/初始化文件struct folder* initFolder();/初始化文件夹void deleteFile(char,char);/参数为文件名,文件夹名void deleteFolder(char,char);void function(char);/参数为当前用户名void dirFile();/列出文件信息void dirFolder(char);void dirFolder(char name)struct folder *head = NULL;head = (struct folder*)malloc(sizeof(struct folder*);head = initFolder();while(1)if(!strcmp(head-folderOwner,name)printf(%s,head-folderName);printf( );head = head-next;if(head = NULL)break;free(head);int main()init();initFolder();char *s = NULL;/存用户名的量puts(欢迎使用本文件系统!n);while(1)puts(请选择您要进行的操作:1.用户登录2.新用户注册);char action2;/用户的操作gets(action);if(action0 = 1)init();s = login();/取得当前登录的用户名if(strcmp(s,)printf(尊敬的);printf(%s,s);printf(,欢迎您的的登录!n);function(s);return 0;elseputs(获取登录用户信息失败!);elseif(action0 = 2)createUser();init();initFolder();s = login();/取得当前登录的用户名if(strcmp(s,)printf(尊敬的);printf(%s,s);printf(,欢迎您的的登录!n);function(s);return 0;elseputs(错误指令!);return 0;void function(char user)struct file *headfile = initFile();struct folder *headfolder = initFolder();/int a =0;/统计文件夹char cdname10;/cd指令的文件夹名称char ciname10;char coname10;/创建新文件夹名称char deliname10;char deliname110;char deloname10;char readname10;char action20;char *re = NULL;/char ss1LENGTH;/从文件中取数据/char *ss1;/puts(user);puts(系统操作指令如下:);puts();puts( );puts( 提示:带-的指令为有操作对象名称的指令,后接文件名或文件夹名称);puts(cd-:打开文件夹cfile:创建新文件 );puts(read-: 读文件内容 cfolder:创建新文件夹);puts(deli-:删除文件delo-:删除文件夹);puts(dir:列出所有文件信息write-:写文件内容);puts(exit:退出系统);puts( );puts();while(1)headfile = (struct file*)malloc(sizeof(struct file);headfolder = (struct folder*)malloc(sizeof(struct folder);headfile = initFile();headfolder= initFolder();puts(请输入指令:);gets(action);switch (action0)case c:switch(action2)case -:printf(请输入文件夹名称,可选文件夹有:);/puts(user);dirFolder(user);gets(cdname);printf(此文件夹中的文件有:);headfile = initFile();while(1)if(!strcmp(headfile-fileFolder,cdname)printf(%s,headfile-fileName);printf( );headfile = headfile-next;if(headfile = NULL)break;printf(n);printf(子文件夹有:);headfolder = initFolder();int a = 0 ;while(1)if(!strcmp(headfolder-parentFolder,cdname)printf(%s,headfolder-folderName);printf( );a+;/printf(n);headfolder = headfolder-next;if(headfolder = NULL)if(a = 0)printf(无子文件夹!);printf(n);break;printf(n);break;case i:printf(创建文件n);printf(请输入新文件所属文件夹名称,);puts(可选文件夹有:);dirFolder(user);gets(ciname);createFile(ciname,headfile);break;case o:puts(创建新文件夹);headfolder = initFolder();puts(请输入所属文件夹名称:);puts(可选文件夹有:);dirFolder(user);headfolder = initFolder();gets(coname);createFolder(user,headfolder,coname);initFolder();break;default:puts(错误指令);break;break;case d:switch(action1)case e:switch(action3)case i:puts(文件删除操作);puts(请输入文件名称:);gets(deliname);puts(请输入所属文件夹名称:);gets(deliname1);deleteFile(deliname,deliname1);dirFile();break;case o:puts(文件夹删除操作);puts(请输入您要删除的文件夹名称,可选文件夹有:);dirFolder(user);gets(deloname);deleteFolder(user,deloname);break;default:puts(错误指令);break;case i:dirFile();break;default:puts(错误指令);break;break;case r:puts(读文件内容);puts(请输入您要读取的文件名称,可选文件有);headfile = initFile();while(headfile != NULL)puts(headfile-fileName);headfile = headfile-next;gets(readname);headfile = initFile();while(headfile != NULL)if(!strcmp(readname,headfile-fileName)printf(文件内容为:);puts(headfile-fContent);headfile = headfile-next;break;case w:puts(写文件操作);puts(请输入您要读取的文件名称,可选文件有);headfile = initFile();while(headfile != NULL)puts(headfile-fileName);headfile = headfile-next;gets(readname);headfile = initFile();re = (char*)malloc(sizeof(char);while(headfile != NULL)if(!strcmp(headfile-fileName,readname)puts(找到该文件!);strcpy(re,headfile-fContent);break;headfile = headfile-next;puts(请输入您要写入的文件内容:);rep = (char*)malloc(100*sizeof(char*);gets(rep);char ss12000;strcpy(ss1,readfile(file);/用于重新保存ReplaceStr(ss1,re,rep);/替换文件中保存文件内容的字符串free(re);free(rep);writefile1(ss1,file,w);initFile();puts(重写操作已完成!);break;case e:puts(退出系统!);break;default:puts(错误指令!);if(!strcmp(action,exit)puts(谢谢您的使用!);break;free(headfile);free(headfolder);void dirFile()struct file *head = NULL;head = (struct file*)malloc(sizeof(struct file);head = initFile();puts(所有文件信息如下:);puts( 文件名文件所属文件夹操作权限 文件长度);while(1)printf(%10s%10s%10s%10dn,head-fileName,head-fileFolder,rw,head-fileLength);head = head-next;if(head = NULL)break;free(head);void init()char strLENGTH;strcpy(str,readfile(user);int p = 0;char delims = ; char *result = NULL; result = strtok( str, delims ); while( result != NULL ) char *name = v( ,result,*);/根据读取文件的内容给user赋值 strcpy(firstU,name); char *pwd = v(*,result,:); strcpy(firstUserp.pwd,pwd); p+; result = strtok( NULL, delims ); countUser = p;/统计用户数量struct folder* initFolder()struct folder *head,*p,*s;int i = 0;if( (head = (struct folder*)malloc(sizeof(struct folder) = NULL)puts(不能分配空间!);head-next = NULL;p = head;char ssLENGTH;/从文件中取数据strcpy(ss,readfile(folder);char delims = ;char *result = NULL;result = strtok( ss, delims );/分割while(result != NULL)i+;if( (s = (struct folder*)malloc(sizeof(struct folder) = NULL)puts(不能分配空间!);p-next = s;/文件夹所有者char *folderOwner = v( ,result,*);strcpy(s-folderOwner,folderOwner);char *folderName =v(*,result,:) ;/文件夹名称strcpy(s-folderName,folderName);char *parentFolder = v(:,result,!);strcpy(s-parentFolder,parentFolder);/父文件夹result = strtok( NULL, delims );s-next = NULL;p = s;free(s);return head-next;struct file* initFile()struct file *head,*p,*s;int i = 0;if( (head = (struct file*)malloc(sizeof(struct file) = NULL)puts(不能分配空间!);head-next = NULL;p = head;char ssLENGTH;/从文件中取数据strcpy(ss,readfile(file);char delims = ;char *result = NULL;result = strtok( ss, delims );/分割int count = 0;while(result != NULL)i+;if( (s = (struct file*)malloc(sizeof(struct file) = NULL)puts(不能分配空间!);p-next = s;char *folderName = v( ,result,*);/根据读取file文件的内容给file赋值 strcpy(s-fileFolder,folderName);/文件所属文件夹名char *fileName = v(*,result,:);strcpy(s-fileName,fileName);/文件名称char *fcontent = v(:,result,!);strcpy(s-fContent,fcontent);/文件内容while(s-fContent)count != 0)count+;s-fileLength = count;count = 0;/初始化为0result = strtok( NULL, delims );s-next = NULL;p = s;free(s);return head-next;char* login()int i = 0;int j = 0;/密码输入次数小于三次/char name20;char pwd10;printf(请输入用户名:);gets(name);while(1)if(!strcmp(name,firstU)printf(请输入密码:);gets(pwd);while(jfileFolder,folderName)deleteFile(delfile-fileName,folderName);delfile = delfile-next;/puts(删除子文件1);if(delfile = NULL)break;free(delfile);char ssLENGTH;/从文件中取数据char ss1LENGTH;strcpy(ss,readfile(folder);strcpy(ss1,readfile(folder);/用于重新保存char *s = ss1;s = (char*)malloc(1024*sizeof(char);char delims = ;char *result = NULL;result = strtok( ss, delims );/分割while(result != NULL)char *folderName1 = v(*,result,:);if(!strcmp(folderName1,folderName)char *re = strcat(result,;);char *rep = ;/puts(result);ReplaceStr(ss1,re,rep);writefile1(ss1,folder,w);puts(找到此文件夹!文件夹已删除!);break;elseresult = strtok( NULL, delims );if(result = NULL)puts(未找到此文件夹!);break;free(s);initFolder();void createUser()if(countUser fileFolder)i+;headfile = headfile-next;if(i = 0)strcat(s,floderName);strcat(s,*);strcat(s,fileName);strcat(s,:);printf(请输入文件内容:);gets(fileContent);strcat(s,fileContent);strcat(s,!;);/puts(s);strcat(s,ss);writefile1(s,file,w);puts(新文件已成功创建!);initFile();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论