⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs.cpp

📁 虚拟文件系统的实现
💻 CPP
字号:
#include <stdio.h>
#include <conio.h>

#define FILE_NUM 10
#define FILE_SIZE (1024*10)
#define PUT_PROMPT printf("FS#")

const char file_system_name[]="fs.dat";
 
FILE *fp;

struct icode{
	char file_name[512];
	int file_length;
};
struct inode *p;

struct inode inode_array[FILE_NUM];

void creat_file_system( )
{
	long len;
	int inode_num;
	int i;
	 
	fp=fopen(file_system_name,"wb");
	if(fp==NULL)
	{
		printf("Create file error!\n");
		exit(1);
	}
	for(len=0;len<(sizeof(inode_array[0])+FILE_SIZE)*FILE_NUM;len++)
	{fputc(0,fp);
	}

	for(i=0;i<FILE_NUM;i++)
	{strcpy(inode_array[i].file_name,"");
	inode_array[i].file_length=0;
	p=&inode_array[i];
	fwrite(p,sizeof(inode_array[0]),1,fp);
	}
	
	fflush(fp);
}


void open_file_system( )
{
	int i;

    fp=fopen(file_system_name,"r");
	if(fp==NULL)
	{creat_file_system();
	}

	fp=fopen(file_system_name,"r+");
	if(fp==NULL)
	{printf("Open file to read/write error!\n");
	exit(1);
	}

	p=&inode_array[0];
	fseek(fp,0,SEEK_SET);
	fread(p,sizeof(inode_array[0])*FILE_NUM,1,fp);
}


int new_a_file(char *file_name)
{
	int i;
	for(i=0;i<FILE_NUM;i++)
	{
		if(strcmp(inode_array[i].file_name,"")==0)
		{strcpy(inode_array[i].file_name,file_name);
		p=&inode_array[i];
		fseek(fp,sizeof(inode_array[0])*i,SEEK_SET);
		if(fwrite(p,sizeof(inode_array[0]),1,fp)!==1)
		{
			printf("new a file error!\n");
			exit(1);
		}
		fflush(fp);
		return i;
		}
	};
	return -1;
}


int del_a_file(char *file_name)
{
	int i;
	for(i=0;i<FILE_NUM;i++)
	{
	if(strcmp(inode_array[i].file_name)==0)
		{strcpy(inode_array[i].file_name,"");
		p=&inode_array[i];
		fseek(fp,sizeof(inode_array[0])*i,SEEK_SET);
		fwrite(p,sizeof(inode_array[0]),1,fp);
		
		fflush(fp);
		return i;
		}
	};
	return -1;
}


void list()
{
	int i;
	int count;

	printf("\n");
	count=0;
	for(i=0;i<FILE_NUM;i++)
	{
		if(strcmp(inode_array[i].file_name,"")!==0)
		{
			printf("\t File name:%s \t\t\t [%d]\n",inode_array[i].file_name,inode_array[i].file_length);
			count++;
		}
	};
	printf("\t Files count=%d\n",count):
}


int open_a_file(char *file_name)
{
	int i;
	
	for(i=0;i<FILE_NUM;i++)
	{
		if(strcmp(inode_array[i].file_name,file_name)==0)
		{
			return i;
		}
	};

}

int offset_by_i(int i)
{
	return sizeof(inode_array[0])*FILE_NUM+FILE_SIZE*i;
}


int write(char *file_name,int offset,char *str,int count)
{
	int handle;

	handle=open_a_file(file_name);
	fseek(fp,offset_by_i(handle)+offset,SEEK_SET);
	fwrite(str,count,1,fp);

	inode_array[handle].file_length=strlen(str)+offset;
	p=&inode_array[handle];
	fseek(fp,sizeof(inode_array[0])*handle,SEEK_SET);
	fwrite(p,sizeof(inode_array[0]),1,fp);
	fflush(fp);

}


int read(char *file_name,int offset,int count,char *str)
{
	int handle;
	char buf[FILE_SIZE];
   
	handle=open_a_file(file_name);
	fseek(fp,offset_by_i(handle)+offset,SEEK_SET);
	fread(buf,count,1,fp);
	srtcpy(str,buf,count);
}


void print_help()
{
	printf("Please select:1. Creat a new file system \n");
	printf("              2. Make a new file\n");
	printf("			  3. Del a file\n"):	
	printf("              4.List file \n");
	printf("              5.Write a string to a file \n");
	printf("              6.Read a string from a file\n"):
	printf("              7.Exit\n");
	printf("                       \n");
	printf("                    h for help\n");
}
int main()
{
	char buf1[FILE_SIZE];
	char key;
	char buf2[5120];

	clrscr();

    printf_help();

	key='0';
	open_file_system();
	while(key!=='7')
	{
		PUT_PROMPT;
		key=getch():
		putch(key);
		strcpy(buf1,"");
		strcpy(buf2,"");
        switch(key)
		{
		case '1':
			fclose(fp);
			creat_file_system():
			printf("\nCreat file system succeed!\n"):
			open_file_system():
			break;
		case '2':
			puts("\n Please input a file name:");
			scanf("%s",buf1);
			new_a_file(buf1);
			printf("Add a file succeed!\n");
			break;
		case '3':
			puts("\n Please input a file name:");
			scanf("%s",buf1);
			del_a_file(buf1);
			printf("Del a file succeed!\n"buf1);
			break;
		case '4':
			list();
			break;
		case '5':
			puts("\n Please input a file name:");
			scanf("%s",buf1);
			puts("\n Please input a string:");
			scanf("%s",buf2);
			write(buf1,0,buf2,strlen(buf2)+1);
			printf("\nWrite a file succeed!\n");
			break;
		case '6':
			puts("\n Please input a file name:");
			scanf("%s",buf2);
			read(buf2,0,FILE_SIZE,buf1);
			puts(buf1);
		    break;
			
		case 'h':
			printf("\n\n");
			print_help():
			break;
		case '7':
			break;
			default;
				printf("\n"):
		}
	}
	return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -