📄 wenjianmulu.cpp
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define L 10 //存储块个数
#define B 20 //存储块长度
#define mem_max 100 //内存空间
#define fmax 20 //创建的文件数
#define NAMEMAX 20//名字长度
int idisk[L][B]; //磁盘结构
int mem[mem_max];//内存空间
int p_mem;//指向内存当前位置
struct fi
{
char fname[NAMEMAX];
int length;
int flag;
int status;
};
fi file[fmax];
int p_file;
void read_block(int x, int p_mem)
{
for(int i=0;i<B;i++)
{
mem[p_mem+i] = idisk[x][i];
}
}
void write_block(int x, int p_mem)
{
for(int i=0;i<B;i++)
{
idisk[x][i] = mem[p_mem+i];
}
}
//根据指定的文件名创建新文件。
int create()
{
char temp[NAMEMAX];
cout<<"请输入文件名:"<<endl;
scanf("%s",temp);
for(int i=0;i<fmax;i++)
{
if(strcmp(file[i].fname,temp)==0)
{
cout<<"该文件名已经存在请重新输入"<<endl;
return 0;
}
}
for( i=0;i<fmax;i++)
{
if(file[i].flag == 0)break;
}
if(file[i].flag == 1)
{
cout<<"创建失败"<<endl;
return 0;
}
strcpy(file[i].fname,temp);
file[i].flag = 1;
return 1;
}
//删除指定文件。
int destroy()
{
char temp[NAMEMAX];
cout<<"请输入要删除的文件名"<<endl;
scanf("%s",temp);
for(int i=0;i<fmax;i++)
{
if(strcmp(file[i].fname,temp)==0)break;
}
if(strcmp(file[i].fname,temp)!=0)
cout<<"不存在该文件!请重新输入:"<<endl;
file[i].flag = 0;
return 1;
}
//打开文件。该函数返回的索引号可用于后续的read, write, lseek,或close操作。
int open()
{
char temp[NAMEMAX];
cout<<"请输入要打开的文件名"<<endl;
scanf("%s",temp);
for(int i=0;i<fmax;i++)
{
if(strcmp(file[i].fname,temp)==0)break;
}
if(file[i].status == 1)
cout<<"文件已经打开"<<endl;
file[i].status = 1;
system("pause");
return i;
}
//关闭指定文件。
int close(int index)
{
file[index].status = 0;
return index;
}
//从指定文件顺序读入count个字节mem指定的内存位置。
//读操作从文件的读写指针指示的位置开始。
void read(int index)// int mem_area, int count
{
int count;
cout<<"请输入大小:"<<"(要小于"<<file[index].length <<")"<<endl;
cin>>count;
if(count>file[index].length)
{
cout<<"输入错误,请重新输入"<<endl;
read(index);
}
p_mem = 0;
read_block(index, p_mem);
for(int i=0;i<count;i++)
{
char a;
a = mem[p_mem + i];
cout<<a<<endl;
}
system("pause");
}
//把mem指定的内存位置开始的count个字节顺序写入指定文件。
//写操作从文件的读写指针指示的位置开始。
void write(int index)//, int mem_area, int count
{
int count;
cout<<"请输入写文件的大小:"<<endl;
cin>>count;
p_mem = 0;
cout<<"请输入字符:"<<endl;
for(int i=0;i<count;i++)
{
char a;
cin>>a;
mem[p_mem + i] = a;
}
write_block(index, p_mem);
file[index].length =file[index].length +count;
}
//列表显示所有文件及其长度。
void directory()
{
for(int i=0;i<fmax;i++)
{
if(file[i].flag ==1)
cout<<"文件名:"<<file[i].fname<<" 文件长度为:"<<file[i].length <<endl;
}
system("pause");
}
void main();
void opens(int index)
{
system("cls");
cout<<endl<<endl;
cout<<"\t\t"<<" *********模拟文件系统********"<<endl<<endl;
cout<<"\t\t\t"<<"1.读文件"<<endl<<endl;
cout<<"\t\t\t"<<"2.写文件"<<endl<<endl;
cout<<"\t\t\t"<<"3.关闭文件"<<endl<<endl;
cout<<"\t\t"<<" *********模拟文件系统********"<<endl<<endl;
cout<<"\t请输入1-3:"<<endl;
int num;
cin>>num;
switch(num)
{
case 1:
read(index);
opens(index);
break;
case 2:
write(index);
opens(index);
break;
case 3:
close(index);
main();
break;
default:
opens(index);
break;
}
}
void main()
{
system("cls") ;
cout<<endl<<endl;
cout<<"\t\t"<<" *********模拟文件系统********"<<endl<<endl;
cout<<"\t\t\t"<<"1.创建文件"<<endl<<endl;
cout<<"\t\t\t"<<"2.删除文件"<<endl<<endl;
cout<<"\t\t\t"<<"3.打开文件"<<endl<<endl;
cout<<"\t\t\t"<<"4.显示所有文件"<<endl<<endl;
cout<<"\t\t\t"<<"5.退出"<<endl;
cout<<"\t\t"<<" *********模拟文件系统********"<<endl<<endl;
cout<<"\t请输入1-5:"<<endl;
int num;
cin>>num;
int index;
switch(num)
{
case 1:
create();
main();
break;
case 2:
destroy();
main();
break;
case 3:
index = open();
opens(index);
break;
case 4:
directory();
main();
break;
case 5:
exit(0);
break;
default:
main();
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -