linux 文件操作系统 设计

linux操作系统 文件管理系统设计

版本1.0

 

#include<fcntl.h> 
#include<sys/types.h> 
#include<sys/stat.h> 
#include<unistd.h> 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dirent.h> 

#define LENGTH 2000 
char str[100];
char buf[100];
void z_read(char* s); 
void z_write(char* s); 
void z_welcome();
void z_delete_file(char* s);
void z_delete_dir(char* s);
void z_create_file(char* s);
void z_create_dir(char *s);
void scan_dir(char* dir,int depth);

int main(){
	int in;
	do{
		z_welcome();
		scanf("%d",&in);
		switch(in){
			case 0: 
				exit(0);
			break;
			case 1: 
				printf("输入要创建的文件夹:");
				scanf("%s",&str);
				z_create_dir(str);
			break;
			case 2: 
				printf("输入要创建的文件:");
				scanf("%s",&str);
				z_create_file(str);
			break;
			case 3: 
				printf("输入要删除的文件夹:");
				scanf("%s",&str);
				z_delete_dir(str);
			break;
			case 4:
 				printf("输入要删除的文件:");
				scanf("%s",&str);
				z_delete_file(str);
			break;
			case 5:
 				printf("输入要写入文件的路径:");
				scanf("%s",&str);
				z_write(str);
			break;
			case 6: 
 				printf("输入要读取文件的路径:");
				scanf("%s",&str);
				z_read(str);
			break;
			case 7: 
				printf("输入要查找显示的路径:");
				scanf("%s",&str);
				scan_dir(str,0);
			break;	
			case 8:
				printf("输入要打开的路径:");
				scanf("%s",&str);
				chdir(str); 			
			break;	
			case 9:

				printf("%s\n",getcwd(buf,sizeof(buf)));
		}
	}while(1);
	return 0;
}
void z_welcome(){
	printf("|-->        welcome to zxl         <--|\n");
	printf("|-------------------------------------|\n");
	printf("|-->input 0 exit                    --|\n");
	printf("|-->input 1 to create work path     --|\n");
	printf("|-->input 2 to create a new folder  --|\n");
	printf("|-->input 3 to delete work path     --|\n");
	printf("|-->input 4 to delete a new folder  --|\n");
	printf("|-->input 5 to write folder         --|\n");
	printf("|-->input 6 to read folder          --|\n");
	printf("|-->input 7 to search path          --|\n");
	printf("|-->input 8 to open path            --|\n");
	printf("|-->input 9 to display into path    --|\n");
	printf("|-------------------------------------|\n");
}
void z_create_dir(char* s){
	if(mkdir(s,0755)!=-1){ 
		puts("目录创建成功");
	}else
		return 1;
}

void z_create_file(char* s){
	if(creat(s,0664)!=-1){ 
		puts("文件创建成功");
		//sleep(2);
	}
	else
		return 1;
}

void z_delete_dir(char* s){
	if(rmdir(s) !=-1){ 
		puts("删除目录成功");
	}
	else
		return 1;
}


void z_delete_file(char* s){
	if(unlink(s)!=-1){  
		puts("删除文件成功");
		//sleep(2);
	}
	else
		return 1;
}

void z_read(char* s){
	char c[LENGTH]; 
	int f,i,j=0; 
	f=open(s,O_RDONLY,LENGTH); 
	if(f!=-1){ 
		i=read(f,c,LENGTH);
		if(i>0){  
			for(;i>0;i--)
				putchar(c[j++]);
		}else
			perror("读取");	 
	}else
		perror("打开文件");	
}

void z_write(char* s){
	char c[LENGTH]; 
	int f,i;
	puts("输入要保存的文件信息:");
	if((i=read(0,c,LENGTH))<1){ 
		perror("读取失败");
		return 1 ;
	}
	f=open(s,O_RDWR | O_CREAT |O_APPEND ,0664);
	if(f!=-1){
		if(write(f,c,i)!=i) 
			perror("写入失败");
		puts("保存成功");
		close(f);	 
	}else
		perror("打开文件");
}

void scan_dir(char* dir,int depth) { 

DIR  *dp; 
struct dirent *entry;
struct stat statbuf; 
	if((dp=opendir(dir))==NULL){  
		puts("无法打开该目录");
		return;
	}
	chdir(dir);  
	while((entry = readdir(dp))!=NULL){ 
		lstat(entry->d_name,&statbuf);
		if(S_IFDIR & statbuf.st_mode){
			if(strcmp(".",entry->d_name)==0 || strcmp("..",entry->d_name)==0)
				continue; 
			printf("%*s%s/\n",depth,"",entry->d_name);
			scan_dir(entry->d_name,depth+4);
		}else
			printf("%*s%s\n",depth,"",entry->d_name); 
	}
	chdir(".."); 
	closedir(dp); 
}

 

版本2.0

 

#include<fcntl.h> 
#include<sys/types.h> 
#include<sys/stat.h> 
#include<unistd.h> 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dirent.h>


#define LENGTH 2000 
char str[100];
char buf[100];
char zz[]="find 		-name 		";
char z_file[50];
void z_read(char* s); 
void z_write(char* s); 
void z_welcome();
void z_delete_file(char* s);
void z_delete_dir(char* s);
void z_create_file(char* s);
void z_create_dir(char *s);
void scan_dir(char* dir,int depth);
void str_ins(char source[],int index,char dest[]);

int main(){
	int in;
	do{
		z_welcome();
		scanf("%d",&in);
		switch(in){
			case 0: 
				exit(0);
			break;
			case 1: 
				printf("输入要创建的文件夹:");
				scanf("%s",&str);
				z_create_dir(str);
			break;
			case 2: 
				printf("输入要创建的文件:");
				scanf("%s",&str);
				z_create_file(str);
			break;
			case 3: 
				printf("输入要删除的文件夹:");
				scanf("%s",&str);
				z_delete_dir(str);
			break;
			case 4:
 				printf("输入要删除的文件:");
				scanf("%s",&str);
				z_delete_file(str);
			break;
			case 5:
 				printf("输入要写入文件的路径:");
				scanf("%s",&str);
				z_write(str);
			break;
			case 6: 
 				printf("输入要读取文件的路径:");
				scanf("%s",&str);
				z_read(str);
			break;
			case 7: 
				printf("输入要查找显示的路径:");
				scanf("%s",&str);
				scan_dir(str,0);
			break;	
			case 8:
				printf("输入一个大致路径:");
				scanf("%s",&str);
				printf("输入查找的文件名:");
				scanf("%s",&z_file);
				str_ins(zz,5,str);
				str_ins(zz,strlen(zz),z_file);
				system(zz);
				printf("\n");
			break;	
			case 9:
				printf("输入要打开的路径:");
				scanf("%s",&str);
				chdir(str);
				break; 
			break;
			case 10:
				printf("当前路径:%s\n",getcwd(buf,sizeof(buf)));
				break;
		}
	}while(1);
	return 0;
}

void str_ins(char source[],int index,char dest[]){
	int i,j,k;
	j=0;while(dest[j])j++;j--;
	k=0;while(source[k])k++;k--;
	for(i=k-index+1;i>=0;i--) source[index+j+i]=source[index+i];
	for(i=0;i<=j;i++) source[i+index]=dest[i];
}


void z_welcome(){
	printf("|-->        welcome to zxl         <--|\n");
	printf("|-------------------------------------|\n");
	printf("|-->input 0 exit                    --|\n");
	printf("|-->input 1 to create work path     --|\n");
	printf("|-->input 2 to create a new folder  --|\n");
	printf("|-->input 3 to delete work path     --|\n");
	printf("|-->input 4 to delete a new folder  --|\n");
	printf("|-->input 5 to write folder         --|\n");
	printf("|-->input 6 to read folder          --|\n");
	printf("|-->input 7 to search path          --|\n");
	printf("|-->input 8 to search folder        --|\n");
	printf("|-->input 9 to open path            --|\n");
	printf("|-->input 10 to display into path   --|\n");
	printf("|-------------------------------------|\n");
}
void z_create_dir(char* s){
	if(mkdir(s,0755)!=-1){ 
		puts("目录创建成功");
	}else
		return 1;
}

void z_create_file(char* s){
	if(creat(s,0664)!=-1){ 
		puts("文件创建成功");
		//sleep(2);
	}
	else
		return 1;
}

void z_delete_dir(char* s){
	if(rmdir(s) !=-1){ 
		puts("删除目录成功");
	}
	else
		return 1;
}


void z_delete_file(char* s){
	if(unlink(s)!=-1){  
		puts("删除文件成功");
		//sleep(2);
	}
	else
		return 1;
}

void z_read(char* s){
	char c[LENGTH]; 
	int f,i,j=0; 
	f=open(s,O_RDONLY,LENGTH); 
	if(f!=-1){ 
		i=read(f,c,LENGTH);
		if(i>0){  
			for(;i>0;i--)
				putchar(c[j++]);
		}else
			perror("读取");	 
	}else
		perror("打开文件");	
}

void z_write(char* s){
	char c[LENGTH]; 
	int f,i;
	puts("输入要保存的文件信息:");
	if((i=read(0,c,LENGTH))<1){ 
		perror("读取失败");
		return 1 ;
	}
	f=open(s,O_RDWR | O_CREAT |O_APPEND ,0664);
	if(f!=-1){
		if(write(f,c,i)!=i) 
			perror("写入失败");
		puts("保存成功");
		close(f);	 
	}else
		perror("打开文件");
}

void scan_dir(char* dir,int depth) { 

DIR  *dp; 
struct dirent *entry;
struct stat statbuf; 
	if((dp=opendir(dir))==NULL){  
		puts("无法打开该目录");
		return;
	}
	chdir(dir);  
	while((entry = readdir(dp))!=NULL){ 
		lstat(entry->d_name,&statbuf);
		if(S_IFDIR & statbuf.st_mode){
			if(strcmp(".",entry->d_name)==0 || strcmp("..",entry->d_name)==0)
				continue; 
			printf("%*s%s/\n",depth,"",entry->d_name);
			scan_dir(entry->d_name,depth+4);
		}else
			printf("%*s%s\n",depth,"",entry->d_name); 
	}
	chdir(".."); 
	closedir(dp); 
}

 

 

 


截图:


 

 

 

posted @ 2013-06-15 14:44  爱生活,爱编程  阅读(409)  评论(0编辑  收藏  举报