操作系统实验报告实验四.docx
- 文档编号:3631036
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:144.51KB
操作系统实验报告实验四.docx
《操作系统实验报告实验四.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告实验四.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统实验报告实验四
昆明理工大学信息工程与自动化学院学生实验报告
(2012—2013学年第二学期)
课程名称:
操作系统开课实验室:
信自楼4452013年5月30日
年级、专业、班
学号
姓名
成绩
实验项目名称
文件操作
指导教师
舒国锋
教师评语
教师签名:
年月日
一、实验要求:
利用C语言提供的库函数(stdio.h),实现以下功能
1.新建文件
2.打开文件
3.读文件(读取文本文件内容)
4.写文件(把一串文本写入文件)
5.关闭文件
6.删除文件
其中,测试文件采用c:
\test.txt文本文件
二、实验目的
用C或C++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
三、实验原理及基本技术路线图(方框原理图)
用C模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。
程序功能结构图:
主目录
退出
帮助
复制文件
重命名
显示类容
删除文件
新建文件
删
除
目
录
新建目录
进入子目录
四、所用仪器、材料(设备名称、型号、规格等)。
计算机一台
五、实验方法、步骤
程序:
#include"stdio.h"
#include"windows.h"
#include"string.h"
#include
charcomd[10];//命令
charset[MAX_PATH];//第一参数
charset2[MAX_PATH];//第二参数
charroot[MAX_PATH];//当前路径
charrr[MAX_PATH];//绝对路径
/*查找文件或路径*/
intfindFile(char*name){
intfound=0;
struct_WIN32_FIND_DATAAfileData;
HANDLEhdf;
hdf=FindFirstFile("*",&fileData);
while(FindNextFile(hdf,&fileData)){//继续寻找
if(strcmp(name,fileData.cFileName)==0&&!
(fileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))//如果找到
found=found+1;//找到文件
elseif(strcmp(name,fileData.cFileName)==0&&(fileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
found=found+2;//找到目录
}
FindClose(hdf);
returnfound;//如果found=3,则既有文件又有目录
}
/*进入目录*/
voidcdComd(){
if(strcmp(root,"Root")==0&&strcmp(set,"..")==0)
printf("已经到根目录了!
\n");
elseif(findFile(set)==2||findFile(set)==3)
SetCurrentDirectory(set);
else
printf("没有该目录!
\n");
}
/*显示目录内容*/
voiddirComd(){
struct_WIN32_FIND_DATAAfileData;
HANDLEhdf;
hdf=FindFirstFile("*",&fileData);//任意匹配文件
while(FindNextFile(hdf,&fileData)){//寻找下一个文件
if(fileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)//如果为目录
printf("
elseif(!
(fileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))//如果为文件
printf("
printf("\t%-16s",fileData.cFileName);//显示文件名
if(fileData.dwFileAttributes==32)
printf("\t%dB\t",fileData.nFileSizeLow);//显示文件大小
elseif(fileData.dwFileAttributes==16)
printf("\t\t");
SYSTEMTIMEsyst;
FileTimeToSystemTime(&(fileData.ftCreationTime),&syst);//获取文件创建时间
printf("\t%4d-%2d-%2d%2d:
%2d:
%2d",syst.wYear,syst.wMonth,syst.wDay,syst.wHour+8,syst.wMinute,syst.wSecond);
printf("\n");//显示文件创建时间
}
FindClose(hdf);
}
/*创建目录*/
voidmdComd(){
if(findFile(set)==2||findFile(set)==3)
printf("该目录已存在!
\n");
else
CreateDirectory(set,NULL);
}
/*删除目录*/
voidrdComd(){
if(findFile(set)==2||findFile(set)==3)
RemoveDirectory(set);
else
printf("没有该目录!
\n");
}
/*创建文件*/
voidcfComd(){
if(findFile(set)==1||findFile(set)==3)
printf("该文件已存在!
\n");
else{
HANDLEhdcf=NULL;//获取创建文件句柄
hdcf=CreateFile(set,0,0,NULL,CREATE_NEW,FILE_FLAG_WRITE_THROUGH,NULL);
CloseHandle(hdcf);//关闭创建文件的句柄
}
}
/*删除文件*/
voiddelComd(){
if(findFile(set)==1||findFile(set)==3){
DeleteFile(set);
}
else
printf("没有该文件!
\n");
}
/*重命名*/
voidrnComd(){
if(findFile(set)!
=0){
MoveFile(set,set2);
}
else
printf("没有该文件!
\n");
}
/*复制文件*/
voidcopyComd(){
if(findFile(set)==1||findFile(set)==3){
CopyFile(set,set2,true);
}
else
printf("没有该文件!
\n");
}
/*显示命令帮助*/
voidhelpComd(){
printf("==============================Command===================================\n");
printf("cd(进入子目录)\tmd(新建目录)\trd(删除目录)\tcf(新建文件)\tdel(删除文件)\n");
printf("dir(显示内容)\trn(重命名)\tcopy(复制文件)\thelp(帮助)\texit(退出)\n");
printf("========================================================================\n");
}
/*退出系统*/
voidexitComd(){
printf("\t谢谢试用!
\n");
exit(0);
}
/*选择命令执行*/
voidselComd(){
if(strcmp(comd,"cd")==0)
cdComd();
elseif(strcmp(comd,"dir")==0)
dirComd();
elseif(strcmp(comd,"md")==0)
mdComd();
elseif(strcmp(comd,"cf")==0)
cfComd();
elseif(strcmp(comd,"rd")==0)
rdComd();
elseif(strcmp(comd,"del")==0)
delComd();
elseif(strcmp(comd,"rn")==0)
rnComd();
elseif(strcmp(comd,"copy")==0)
copyComd();
elseif(strcmp(comd,"help")==0)
helpComd();
elseif(strcmp(comd,"exit")==0)
exitComd();
else
printf("!
无效命令!
\n");
}
/*输入命令及参数*/
voidinputComd(){
scanf("%s",&comd);//输入命令
if(strcmp(comd,"cd")==0||strcmp(comd,"md")==0||strcmp(comd,"cf")==0||strcmp(comd,"rd")==0||strcmp(comd,"del")==0)
scanf("%s",&set);//输入参数1
elseif(strcmp(comd,"rn")==0||strcmp(comd,"copy")==0){
scanf("%s%s",set,set2);
}
elsereturn;
}
/*获取当前目录*/
voidgetRoot(){
GetCurrentDirectory(MAX_PATH,rr);
for(inti=0;i if(rr[i]=='R'&&rr[i+1]=='o'&&rr[i+2]=='o'&&rr[i+3]=='t') strcpy(root,rr+i); return; } /*主函数*/ intmain() { printf("\t\t\t欢迎使用文件系统\n"); helpComd(); SetCurrentDirectory("Root\\");//设置根目录 charpath[MAX_PATH];//显示的路径 while(true){//循环输入命令 getRoot();//获取根目录 strcpy(path,root); strcat(path,"\\>"); printf("%s",path); inputComd();//输入命令 selComd();//执行命令 } return0; } 六、实验过程原始记录(数据、图表、计算等) 运行截图: 1.主界面 2.显示目录 3.创建文件 4.重命名文件 5.删除文件 6.创建目录 7.重命名目录 8.删除目录 9.改变目录 进入子目录 进入子目录 返回上一级目录 10.复制文件 七、实验结果、分析和结论(误差分析与数据处理、成果总结等。 其中,绘制曲线图时必须用计算纸) 此次实验要求用C或C++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。 从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。 虽然此次实验要求做的工作比较多,但难度不是太大,都是以前所学的一些基本知识,该程序实现了创建文件、删除文件、创建目录、删除目录、改变目录、显示目录、重命名、复制文件、改变目录的众多功能。 虽然此次实验我们未学到太多新的东西,但是我们把以前的只是重新复习了一遍,把忘记的知识重新学习了一遍,记得的更牢固了,因此对我们今后的学习还是有很大的帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)