📄 wenjian.c
字号:
fcount[i]++;
while(flag)
{printf("Input text now(Y/N):");
gets(a);
ltrim(rtrim(a));
ufd[i]->ufdfile[fcount[i]-1].flength=0;
if(strcmp(strupr(a),"Y")==0)
{fp_file=fopen(str,"wb+");
ufd[i]->ufdfile[fcount[i]-1].flength=WriteF1();
flag=0;
}
else if(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}
}
printf("\n\'%s\' has been created successfully!\n",fname);
}
else
{printf("\nFail!No Disk Space. Please format your disk.\n");wgetchar=1;}
}
else {printf("\nError. FileMode\'s Range is 0-3\n");wgetchar=1;}
}}
}
int ExistF(char *filename) /*Whether FileName Exist,Exist-i,Not Exist-0*/
{int i,j;
int exist=0;
int ExistD(char *dirname);
j=ExistD(dirname);
for(i=0;i<fcount[j];i++)
if (strcmp(strupr(ufd[j]->ufdfile[i].fname),strupr(filename))==0)
{exist=1;
break;
}
if (exist) return(i);
else return(-1);
}
int FindPANo() /*find out physical address num*/
{int i;
for(i=0;i<MAX;i++)
if (fpaddrno[i]==0) {fpaddrno[i]=1;break;}
if (i<MAX) return(i);
else return(-1);
}
int WriteF1() /*write file*/
{int length=0;
char c;
printf("Please input text(\'#\' stands for end):\n");
while((c=getchar())!='#')
{fprintf(fp_file,"%c",c);
if (c!='\n') length++;
}
fprintf(fp_file,"\n");
fclose(fp_file);
return(length);
}
void DeleteF() /*Delete File*/
{char fname[MAXNAME];
char str[50],str1[50];
int i,j,k,flag=1;
char a[25]; /*whether delete*/
char *rtrim(char *str); /*remove the trailing blanks.*/
char *ltrim(char *str); /*remove the heading blanks.*/
int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/
int ExistD(char *dirname);
if (strcmp(strupr(dirname),strupr(username))!=0)
{printf("\nError. You can only delete file in your own dir.\n");wgetchar=1;}
else
{printf("\nPlease input FileName:");
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if (i>=0)
{k=ExistD(username);
if(ifopen[k][i].ifopen==1)
{printf("\nError. \'%s\' is in open status. Close it before delete.\n",fname);wgetchar=1;}
else
{
while(flag)
{printf("\'%s\' will be deleted. Are you sure(Y/N):",fname);
gets(a);
ltrim(rtrim(a));
if(strcmp(strupr(a),"Y")==0)
{fpaddrno[ufd[k]->ufdfile[i].fpaddr]=0;
itoa(ufd[k]->ufdfile[i].fpaddr,str,10);
for(j=i;j<fcount[k]-1;j++)
{strcpy(ufd[k]->ufdfile[j].fname,ufd[k]->ufdfile[j+1].fname);
ufd[k]->ufdfile[j].fpaddr=ufd[k]->ufdfile[j+1].fpaddr;
ufd[k]->ufdfile[j].flength=ufd[k]->ufdfile[j+1].flength;
ufd[k]->ufdfile[j].fmode=ufd[k]->ufdfile[j+1].fmode;
ifopen[k][j]=ifopen[k][j+1];
}
fcount[k]--;
strcpy(str1,"c:\\osfile\\file\\file");
strcat(str1,str);
remove(str1);
flag=0;
printf("\n\'%s\' has been deleted successfully.\n",fname);
wgetchar=1;
}
else if(strcmp(strupr(a),"N")==0)
{printf("\nError. \'%s\' hasn\'t been deleted.\n",fname);
wgetchar=1;
flag=0;}
}}}
else
{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}
}
void ModifyFM() /*Modify FileMode*/
{char fname[MAXNAME],str[50];
int i,j,k,flag;
char fmode[25]; /*whether delete*/
char *rtrim(char *str); /*remove the trailing blanks.*/
char *ltrim(char *str); /*remove the heading blanks.*/
void InputPW(char *password); /*input password,use '*' replace*/
void SetPANo(int RorW); /*Set physical address num*/
int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/
int ExistD(char *dirname);
if (strcmp(strupr(dirname),strupr(username))!=0) {printf("\nError.You can only modify filemode in yourself dir.\n");wgetchar=1;}
else
{ printf("\nPlease input FileName:");
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if (i>=0)
{k=ExistD(username);
if(ifopen[k][i].ifopen==1)
{printf("\nError.\'%s\' is in open status. Close it before modify.\n",fname);wgetchar=1;}
else
{
if(ufd[k]->ufdfile[i].fmode==0) strcpy(str,"read only"); /*FileMode*/
else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str,"write only");
else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str,"read and write");
else strcpy(str,"Protect");
printf("\'%s\' filemode is %s.\n",fname,strupr(str));
printf("Modify to(0-read only,1-write only,2-read and write,3-Protect):");
gets(fmode);
ltrim(rtrim(fmode));
if(strcmp(fmode,"0")==0)
{ufd[k]->ufdfile[i].fmode=0;
printf("\n\'%s\' has been modified to READ ONLY mode successfully.\n",fname);
wgetchar=1;
}
else if(strcmp(fmode,"1")==0)
{ufd[k]->ufdfile[i].fmode=1;
printf("\n\'%s\' has been modified to WRITE ONLY mode successfully.\n",fname);
wgetchar=1;
}
else if(strcmp(fmode,"2")==0)
{ufd[k]->ufdfile[i].fmode=2;
printf("\n\'%s\' has been modified to READ AND WRITE mode successfully.\n",fname);
wgetchar=1;
}
else if(strcmp(fmode,"3")==0)
{ufd[k]->ufdfile[i].fmode=3;
printf("\n\'%s\' has been modified to FORBID mode successfully.\n",fname);
wgetchar=1;
}
else {printf("\nError.\'%s\' is not modified.\n",fname);wgetchar=1;}
}
}
else
{printf("\nError. \'%s\' dose not exist.\n",fname);wgetchar=1;}}
}
void OpenF() /*Open File*/
{char fname[MAXNAME];
char str[25],str1[25],fmode[25];
int i,k;
char *rtrim(char *str); /*remove the trailing blanks.*/
char *ltrim(char *str); /*remove the heading blanks.*/
int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/
int ExistD(char *dirname);
if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0)
{printf("\nError. Please change to ufd dir before open.\n");wgetchar=1;return;}
printf("\nPlease input FileName:");
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if (i>=0)
{k=ExistD(dirname);
if(!ifopen[k][i].ifopen)
{if (ufd[k]->ufdfile[i].fmode==3)
{printf("\nError. The file\'s mode is FORBID. Can not open.\n");wgetchar=1;}
else
{printf("Please input FileOpenMode(0-Read Only,1-Write Only,2-Read and Write):");
gets(fmode);
ltrim(rtrim(fmode));
if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0))
{if(fmode[0]=='0') /*open file with read only mode*/
{strcpy(str,"read only");
if((ufd[k]->ufdfile[i].fmode==0)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;
}
else if(fmode[0]=='1') /*open file with write only mode*/
{strcpy(str,"write only");
if((ufd[k]->ufdfile[i].fmode==1)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;
}
else if(fmode[0]=='2') /*open file with read and write mode*/
{strcpy(str,"read and write");
if(ufd[k]->ufdfile[i].fmode==2) ifopen[k][i].ifopen=1;
}
if(ufd[k]->ufdfile[i].fmode==0) strcpy(str1,"read only"); /*FileMode*/
else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str1,"write only");
else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str1,"read and write");
if(ifopen[k][i].ifopen==1)
{ifopen[k][i].openmode=atoi(fmode);
if (ifopen[k][i].openmode==0) strcpy(str,"read only");
else if(ifopen[k][i].openmode==1) strcpy(str,"write only");
else if(ifopen[k][i].openmode==2) strcpy(str,"read and write");
printf("\n\'%s\' has been opened. OpenMode is %s,FileMode is %s\n",fname,strupr(str),strupr(str1));
wgetchar=1;
}
else
{printf("\nError. \'%s\' hasn\'t been opened. OpenMode Error. OpenMode is %s,but FileMode is %s\n",fname,strupr(str),strupr(str1));wgetchar=1;}
}
else {printf("\nError. FileOpenMode\'s Range is 0-2\n");wgetchar=1;}
}}
else {printf("\nError. \'%s\' is in open status.\n",fname);wgetchar=1;}
}
else
{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}
}
void CloseF() /*Close File*/
{int i,k,n=0;
char fname[MAXNAME];
char *rtrim(char *str); /*remove the trailing blanks.*/
char *ltrim(char *str); /*remove the heading blanks.*/
int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/
int ExistD(char *dirname);
if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0)
{printf("\nError. Please convert to ufd dir before close.\n");wgetchar=1;return;}
k=ExistD(dirname);
printf("\nOpen File(s) In This Ufd:\n");/*display openned file*/
for(i=0;i<fcount[k];i++)
{if (ifopen[k][i].ifopen==1) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}
if((n%4==0)&&(n!=0)) printf("\n");
}
printf("\n%d files openned.\n",n);
if (n==0) wgetchar=1;
if(n!=0)
{printf("\nPlease input FileName:");
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if(i>=0)
{if(ifopen[k][i].ifopen==1)
{ifopen[k][i].ifopen=0;
ifopen[k][i].openmode=4;
printf("\n\'%s\' has been closed successfully.\n",fname);
wgetchar=1;
}
else {printf("\nError.\'%s\' is in closing status.\n",fname);wgetchar=1;}
}
else {printf("\nError. \'%s\' is not exist.\n",fname);wgetchar=1;}
}
}
void ReadF() /*Read File*/
{int i,k,n=0;
char fname[MAXNAME];
char str[255],str1[255],c;
char *rtrim(char *str); /*remove the trailing blanks.*/
char *ltrim(char *str); /*remove the heading blanks.*/
int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/
int ExistD(char *dirname);
if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError.Please convert to ufd dir before read.\n");wgetchar=1;return;}
printf("\nCaution:Open file first\n");
printf("Opened File(s) List:\n");
k=ExistD(dirname);
for(i=0;i<fcount[k];i++)
{if (ifopen[k][i].ifopen==1)
if ((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}
if((n%4==0)&&(n!=0)) printf("\n");
}
printf("\n%d files openned.\n",n);
if (n==0) wgetchar=1;
if(n!=0)
{printf("\nPlease input FileName:");
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if(i>=0)
{if(ifopen[k][i].ifopen==1)
{if((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2))
{itoa(ufd[k]->ufdfile[i].fpaddr,str,10);
strcpy(str1,"file");
strcat(str1,str);
strcpy(str,"c:\\osfile\\file\\");
strcat(str,str1);
fp_file=fopen(str,"rb");
fseek(fp_file,0,0);
printf("\nThe text is:\n\n");
printf(" ");
while(fscanf(fp_file,"%c",&c)!=EOF)
if (c=='\n') printf("\n ");
else printf("%c",c);
printf("\n\n%d Length.\n",ufd[k]->ufdfile[i].flength);
fclose(fp_file);
wgetchar=1;
}
else
{printf("\nError.\'%s\' has been opened with WRITE ONLY mode. It isn\'t read.\n",fname);wgetchar=1;}
}
else {printf("\nError.\'%s\' is in closing status. Please open it before read\n",fname);wgetchar=1;}
}
else {printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}
}
}
void WriteF() /*Write File*/
{int i,k,n=0;
char fname[MAXNAME];
char str[50],str1[50],a[50];
char *rtrim(char *str); /*remove the trailing blanks.*/
char *ltrim(char *str); /*remove the heading blanks.*/
int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/
int ExistD(char *dirname);
int WriteF1(); /*write file*/
if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError. Please convert to ufd dir before write.\n");wgetchar=1;return;}
k=ExistD(dirname);
printf("\nOpen File(s) with write only mode or read and write mode:\n");/*display openned files with writable mode*/
for(i=0;i<fcount[k];i++)
{if (ifopen[k][i].ifopen==1)
if ((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2)) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}
if((n%4==0)&&(n!=0)) printf("\n");
}
printf("\n%d files open.\n",n);
if (n==0) wgetchar=1;
if(n!=0)
{printf("\nPlease input FileName:");
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if(i>=0)
{if(ifopen[k][i].ifopen==1)
{if((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2))
{itoa(ufd[k]->ufdfile[i].fpaddr,str,10);
strcpy(str1,"file");
strcat(str1,str);
strcpy(str,"c:\\osfile\\file\\");
strcat(str,str1);
if (ufd[k]->ufdfile[i].flength!=0)
{printf("\n\'%s\' has text. Overwrite or Append(O-overwrite,A-Append,else-not write):",fname);
gets(a);
ltrim(rtrim(a));
if (fp_file!=NULL) fclose(fp_file);
if (strcmp(strupr(a),"O")==0)
{printf("\nOverwrite\n");
fp_file=fopen(str,"wb");
ufd[k]->ufdfile[i].flength=0;
ufd[k]->ufdfile[i].flength=WriteF1();
}
else if(strcmp(strupr(a),"A")==0)
{printf("\nAppend\n");
fp_file=fopen(str,"ab");
ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+WriteF1();
}
else
{printf("\nError.\'%s\' has not been written.\n",fname);
fclose(fp_file);
wgetchar=1;
}
}
else
{fp_file=fopen(str,"wb");
ufd[k]->ufdfile[i].flength=WriteF1();
}
}
else
{printf("\nError. \'%s\' has been opened with read only mode.It isn\'t writed.\n",fname);wgetchar=1;}
}
else
{printf("\nError. \'%s\' is in closing status. Please open it before write\n",fname);wgetchar=1;}
}
else
{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}
}
}
void QuitF() /*Quit FileSystem*/
{int i,j;
char str[50];
void SetPANo(int RorW); /*Set physical address num,0-read,1-write*/
SetPANo(1);
if (fp_mfd!=NULL) fclose(fp_mfd);
if (fp_ufd!=NULL) fclose(fp_ufd);
if (fp_file!=NULL) fclose(fp_file);
for(j=0;j<ucount;j++)
{strcpy(str,"c:\\osfile\\");
strcat(str,ufd[j]->ufdname);
ltrim(rtrim(str));
fp_ufd=fopen(str,"wb");
fclose(fp_ufd);
fp_ufd=fopen(str,"ab");
for(i=0;i<fcount[j];i++)
fwrite(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd);
fclose(fp_ufd);}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -