📄 fs.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 + -