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

📄 file_operating.cpp

📁 (1) 为Windows操作系统建立兼容的DOS命令接口
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>

//****************************************************************************************
//存贮输入的各命令参数
void store_parameter(char *buffer,char *parameter[10],int *para_num)
{
	char *buffer_point = buffer;

	for((*para_num) = 0; *buffer_point != '\0' && (*para_num) < 10; (*para_num)++)
	{
		parameter[(*para_num)] = (char*)malloc(64*sizeof(char));
		int j = 0;
		//如果为空格,指针继续移进
		while(*buffer_point == ' ')
		{
			buffer_point++;	
		}
		//如果不是空格,读进变量存储区
		while(*buffer_point != ' ' && *buffer_point != '\0')
		{
			*(parameter[(*para_num)]+j) = *buffer_point;
			buffer_point++;
			j++;
		}
		*(parameter[(*para_num)]+j) = '\0';
	}
}
//*************************************************************************************
//浏览一个路径下的目录和文件
void my_dir(char *a[],int *num)
{
	//浏览当前目录文件
	if( (*num) == 1)
	{
		HANDLE	obj_handle;
		char *lpFileName = (char*)malloc(64*sizeof(char));
		WIN32_FIND_DATA* find_file = new WIN32_FIND_DATA();
		FILETIME lpCreationTime,lpLastAccessTime,lpLastWriteTime;//创建时间,最近访问时间,最近修改时间
				
		SYSTEMTIME systime;//定义系统时间
		//获取当前目录
		GetCurrentDirectory(64,lpFileName);
		strcat(lpFileName,"\\*.*");

		obj_handle = FindFirstFile(lpFileName,find_file);//obj_handle初始化

		if(FindFirstFile(lpFileName, find_file) != INVALID_HANDLE_VALUE)
		{
			while (FindNextFile(obj_handle, find_file))
			{
				HANDLE obj_dir = CreateFile(find_file->cFileName,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_DELETE \
											|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,  NULL);  
				
				if(GetFileTime(obj_dir,&lpCreationTime,&lpLastAccessTime,&lpLastWriteTime))
				{  
					FILETIME  temp_time;  
					FileTimeToLocalFileTime(&lpLastWriteTime,  &temp_time);  //  转换成本地时间  
					FileTimeToSystemTime(&temp_time,  &systime);  //  转换成系统时间格式  
				}
				printf("%d/%d/%d ",systime.wYear,systime.wMonth,systime.wDay);//年月日
				printf("%d:%d:%d ",systime.wHour,systime.wMinute,systime.wSecond);//时分秒
				printf("%s\n",find_file->cFileName);//
				//printf("%d  ",find_file->dwFileAttributes);
				CloseHandle(obj_dir);
				}
		}
		FindClose(obj_handle);
	}
	//浏览其中目录文件
	else if((*num) == 2)
	{
		
		HANDLE	obj_handle;
		char *lpFileName = (char*)malloc(64*sizeof(char));
		char *next_dir =   (char*)malloc(64*sizeof(char));
		WIN32_FIND_DATA* find_file = new WIN32_FIND_DATA();
		FILETIME lpCreationTime,lpLastAccessTime,lpLastWriteTime;//创建时间,最近访问时间,最近修改时间
		SYSTEMTIME systime;//定义系统时间
		WIN32_FIND_DATA* fd = new WIN32_FIND_DATA();

		GetCurrentDirectory(64,lpFileName);
		//打开其中的某一个目录
		if(!SetCurrentDirectory(a[1]))   
			printf("浏览目录失败,可能没有此目录!\n");
        else
		{
			GetCurrentDirectory(64,next_dir);   		
			strcat(next_dir,"\\*.*");
		}

		obj_handle = FindFirstFile(next_dir, fd);//obj_handle初始化
		
		if(FindFirstFile(next_dir, find_file) != INVALID_HANDLE_VALUE)
		{
			while (FindNextFile(obj_handle, find_file))
			{
				HANDLE obj_dir = CreateFile(find_file->cFileName,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_DELETE \
										|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,  NULL);  				
				if(GetFileTime(obj_dir,&lpCreationTime,&lpLastAccessTime,&lpLastWriteTime))
				{  
					FILETIME  temp_time; //临时变量 
					FileTimeToLocalFileTime(&lpLastWriteTime,&temp_time);    
					FileTimeToSystemTime(&temp_time,  &systime);  //转换成系统时间  
				}
				printf("%d/%d/%d ",systime.wYear,systime.wMonth,systime.wDay);//年月日
				printf("%d:%d:%d ",systime.wHour,systime.wMinute,systime.wSecond);//时分秒
				printf("%s\n",find_file->cFileName);//
				CloseHandle(obj_dir);
				}
		}
		FindClose(obj_handle);
		//返回上一个目录
		SetCurrentDirectory(lpFileName);   
	}
	//参数个数大于等于3,警告错误
	else if((*num) >= 3)
		printf("语法格式不正确!\n");
}
//删除一个存在的目录,如果不存在,删除失败!
void my_rd(char *a[],int *num)
{			
	if((*num) == 2)
	{
		if(!RemoveDirectory(a[1])) 
			printf("删除目录失败,可能没有此目录!\n");
        else 
			printf("删除目录成功!\n");   
	}
	else if((*num) == 1)
	{
		printf("正确语法格式为:\n");
		printf("\t    myrd directory\n");
	}
	else
		printf("语法格式不正确!\n");

}
//打开一个存在的目录,如果不存在,打开失败!
void my_cd(char *a[],int *num)
{	
	if((*num) ==2)
	{
		if(!SetCurrentDirectory(a[1]))   
			printf("打开目录失败,可能没有此目录!\n");
        else
			printf("打开目录成功!\n");   
	}
	else if((*num) == 1)
	{
		printf("正确语法格式为:\n");
		printf("\t    mycd directory\n");
	}
	else
		printf("语法格式不正确!\n");


}
//创建一个目录
void my_md(char *a[],int *num)
{
	if((*num) == 2)
	{
		if(!CreateDirectory(a[1],NULL))  
			printf("创建新目录失败!");
		else 
			printf("创建新目录成功\n");
	}
    else if((*num) == 1)
	{
		printf("正确语法格式为:\n");
		printf("\t    mymd directory\n");
	}
	else 
		printf("语法格式不正确!\n");
}
//删除一个存在的文件,如果不存在,删除文件失败!
void my_del(char *a[],int *num)
{
	if((*num) == 2)
	{
		if(!DeleteFile(a[1]))
			printf("删除文件失败!\n");
        else 
			printf("删除文件成功!\n");   
	}
	else if((*num) == 1)
	{
		printf("正确语法格式为:\n");
		printf("\t    mydel file\n");
	}
	else 
		printf("语法格式不正确!\n");
}
//移动一个存在的文件,否则,移动失败
void my_move(char *a[],int *num)
{
	if((*num) == 3)
	{
		if(!MoveFile(a[1],a[2]))
			printf("移动文件失败,文件可能不存在!\n");
		else
			printf("文件移动成功!\n");
	}
	else if((*num) == 1)
	{
		printf("正确语法格式为:\n");
		printf("\t    mymove file\n");
	}
	else 
		printf("语法格式不正确!\n");

}
//重命名一个已经存在的文件,否则,重命名失败!
void my_ren(char *a[],int *num)
{
	if((*num) == 3)                                             
	{                                                             
		if(!MoveFile(a[1],a[2]))  
			printf("重命名文件失败,文件可能不存在!\n");   
		else 
			printf("重命名文件成功!\n");
	}
	else if((*num) == 1)
	{
		printf("正确语法格式为:\n");
		printf("\t    myren file\n");
	}
	else 
		printf("语法格式不正确!\n");
}
//拷贝文件
void my_xcopy(char *a[],int *num)
{
	if((*num) == 3)
	{
		if(!CopyFile(a[1],a[2],1))
			printf("拷贝文件失败,文件可能不存在!\n");
		else printf("拷贝文件成功!\n");
	}
	else if((*num) == 1)
	{
		printf("正确语法格式为:\n");
		printf("\t    myxcopy file\n");
	}
	else 
		printf("语法格式不正确!\n");

}
//退出,后面可带退出参数
void my_exit(char *a[],int *num)
{
	int i;
	for(i=1; i< (*num);i++)
		printf("%s ",a[i]);
	printf("\n");
	exit(1);
}
//****************************************************************************************
// 主程序
//****************************************************************************************
int main()
{
	printf("\t=================================================\n");//
	printf("\t*         这是朱强的文件和目录操作系统课程设计! *\n");//          
	printf("\t*              OPERATING ORDER                  *\n");//              
	printf("\t*              浏览文件和目录:mydir             *\n");//             
	printf("\t*              删除目录      :myrd              *\n");//           
	printf("\t*              打开目录      : mycd             *\n");//           
	printf("\t*              建立目录      : mymd             *\n");//      
	printf("\t*              删除文件      : mydel            *\n");//         
	printf("\t*              移动文件      : mymove           *\n");//         
	printf("\t*              重命名文件    : myren            *\n");//        
	printf("\t*              拷贝文件      : myxcopy          *\n");//          
	printf("\t*              退出          : myexit           *\n");//            
	printf("\t=================================================\n");//
	printf("\n");
	//获取当前路径
	char *current_path = (char*)malloc(64*sizeof(char));
	GetCurrentDirectory(64,current_path);
	printf("%s-->",current_path);
	while(1)
	{
		//定义一个输入命令缓冲区,存储输入的一个或多个命令参数
		char *buffer = (char*)malloc(1024*sizeof(char));
		//存放具体输入的各命令参数,参数最大数目为10
		char *parameter[10];
		//存放参数个数
		int *para_num = (int*)malloc(sizeof(int));
		//输入命令
		gets(buffer);
		//将buffer中各参数存储到paremeter中
		store_parameter(buffer,parameter,para_num);
		//解释各命令,并执行!
		if(strcmp(parameter[0],"mydir")==0 || strcmp(parameter[0],"MYDIR")==0)
		{
			my_dir(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"myrd")==0  || strcmp(parameter[0],"MYRD")==0 )
		{
			my_rd(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"mycd")==0  || strcmp(parameter[0],"MYCD")==0 )
		{
			my_cd(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"mymd")==0  || strcmp(parameter[0],"MYMD")==0 )
		{
			my_md(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"mydel")==0 || strcmp(parameter[0],"MYDEL")==0)
		{
			my_del(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"mymove")==0 || strcmp(parameter[0],"MYMOVE")==0)
		{
			my_move(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"myren")==0 || strcmp(parameter[0],"MYREN")==0)
		{
			my_ren(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"myxcopy")==0 || strcmp(parameter[0],"MYXCOPY")==0)
		{
			my_xcopy(parameter,para_num);
			goto back_currentdirectory;
		}
		else if(strcmp(parameter[0],"myexit")==0 || strcmp(parameter[0],"MYEXIT")==0 )
			my_exit(parameter,para_num);
back_currentdirectory:
			GetCurrentDirectory(64,current_path);//获取当前路径
			printf("%s-->",current_path);
		
	}

	return 0;
}

⌨️ 快捷键说明

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