c++ Dos命令模拟(小部分)

#include<iostream>
#include<cstring>
#include<fstream>
#include<windows.h>
#include<direct.h>
using namespace std;
class Dos//dos命令 
{
	public:
	void Move(string file,string other);//移动文件位置 
	void Copy(string file,string other);//复制文件位置 
	void Dls(string name);//删除文件夹 
	void DelFile(string name);//删除指定路径的文件 
	void DelAll();//删除当前路径的文件 
	bool FileSum(string S);//判断是否文件夹是否为空 
	void DelEmpty();//删除空文件夹 
	void DelJpg();//删除当前路径的JPG文件 
	void Cd(string path);//指定为当前路径 
	void Cd();//指定当前路径为上一层路径 
	void Dir();//获取当前路径下的所有文件夹和文件信息 
	
};
class Work//开始执行 
{
	public:
		void solve();//执行 

};
void Dos:: Move(string file,string other)//移动文件 
{
	char filename[MAX_PATH];
	char otherfile[MAX_PATH];
	for(int i=0;i<=file.size();i++)//获取文件的路径信息 
	{
		filename[i]=file[i];
	}
	for(int i=0;i<=other.size();i++)//获取文件的路径信息
	{
		otherfile[i]=other[i];
	}
	MoveFile(filename, otherfile);//移动,用MoveFile 
}
void Dos::Copy(string file,string other)//复制文件 
{
	char filename[MAX_PATH];
	char otherfile[MAX_PATH];
	for(int i=0;i<=file.size();i++)//获取文件的路径信息
	{
		filename[i]=file[i];
	}
	for(int i=0;i<=other.size();i++)//获取文件的路径信息
	{
		otherfile[i]=other[i];
	}
	CopyFile(filename, otherfile,false);//复制文件,从fie到other 
}
void Dos:: Dls(string name)//删除非空文件 
{
	char filename[MAX_PATH];
	for(int i=0;i<=name.size();i++)//获取文件的路径信息
	{
		filename[i]=name[i];
	}
	strcpy(filename,"\\*.*");//仿照dir获取它内部的文件信息,递归删除 文件,使他为空,最后利用removedirectory删除 
	WIN32_FIND_DATA findFileData;
	HANDLE hFindFile=FindFirstFile(filename,&findFileData);
	do
	{
		string s=findFileData.cFileName;
		char road[MAX_PATH];
		cout<<road<<endl;
		for(int i=0;i<=s.size();i++)//获取文件的路径信息
		{
			road[i]=s[i];
		}
		
		if(findFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)//文件夹删除 
		{
			RemoveDirectory(road);
		}
		else//文件删除 
		{
			DeleteFile(road);//传路径 
		}
		
	}while(FindNextFile(hFindFile,&findFileData)!=0);//递归查找删除 
	FindClose(hFindFile);
	cout<<endl<<endl;
	
	RemoveDirectory(filename);//删除非空文件 
}
void Dos:: DelAll()//删除所有文件当前路径 
{
    char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,path);
    cout<<path<<endl<<endl;
	strcat(path,"\\*.*");//仿照dir获取所有文件,然后一一删除 
	WIN32_FIND_DATA findFileData;
	HANDLE hFindFile=FindFirstFile(path,&findFileData);
	do
	{
		string s=findFileData.cFileName;
		char road[MAX_PATH];
		for(int i=0;i<=s.size();i++)//获取文件的路径信息
		{
			road[i]=s[i];
		}
		DeleteFile(road);
		
	}while(FindNextFile(hFindFile,&findFileData)!=0);//递归查找删除 
	FindClose(hFindFile);
	cout<<endl<<endl;
}
void Dos::DelFile(string name)//删除指定路径文件 
{
	char filename[MAX_PATH];
	for(int i=0;i<=name.size();i++)//获取文件的路径信息
	{
		filename[i]=name[i];
	}
	cout<<filename;
	DeleteFile(filename);//删除文件 
}
bool Dos::FileSum(string S)//判断文件夹是否为空 
{
	Cd(S);
	int sum=0,cnt=0;
	char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,path);
    
	strcat(path,"\\*.*");
	WIN32_FIND_DATA findFileData;
	HANDLE hFindFile=FindFirstFile(path,&findFileData);
	do
	{
		string s=findFileData.cFileName;
		if(s==".."&&s==".")//即根据.和..来判断,只有这两个的话,总和就是2, 
		{
			sum++;
		}
		else
		{
			cnt++;
		}
	}while(FindNextFile(hFindFile,&findFileData)!=0);
	FindClose(hFindFile);

	return sum+cnt>2;//》2就是有文件,反之没有 

}
void Dos:: DelEmpty()//删除空文件夹 
{
	char path[MAX_PATH];
	string road;
        GetCurrentDirectory(MAX_PATH,path);//获取当前路径 
	strcat(path,"\\*.*");
	WIN32_FIND_DATA findFileData;
	HANDLE hFindFile=FindFirstFile(path,&findFileData);
	do//遍历查找,那个文件为空, 
	{
		if(findFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)//表示为文件 
		{
			string s=findFileData.cFileName;
			char Road[MAX_PATH];
			if(s!=".."&&s!=".")//此时判断为文件 
			{
	        for(int i=0;i<s.length();i++)//获取文件的路径信息
		    {
		    	if(s[i]=='\\')
		    	{
		    		Road[i]='/';
		    		
				}
				else
				{
					Road[i]=s[i];
				}
		    }
			if(!FileSum(s))//判断 
			{
				RemoveDirectory(Road);//删除 
				Cd();//返回上一级信息 ,因为前面是在下一级 
			}
			}
		
		}
		
	}while(FindNextFile(hFindFile,&findFileData)!=0);
	FindClose(hFindFile);
	cout<<endl<<endl;
}
void Dos::DelJpg()//删除全部jpg文件 
{
	char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,path);
    cout<<path<<endl<<endl;
	strcat(path,"\\*.*");
	WIN32_FIND_DATA findFileData;
	HANDLE hFindFile=FindFirstFile(path,&findFileData);
	do//遍历查找jpg文件 
	{
		string s=findFileData.cFileName;
		if(s.rfind(".jpg")!=-1)
		{
		    char road[MAX_PATH];
		    cout<<s<<endl;
		    for(int i=0;i<s.length();i++)//获取文件的路径信息
		    {
			road[i]=s[i];
		    }
			DeleteFile(road);//删除文件 
		}
		
	}while(FindNextFile(hFindFile,&findFileData)!=0);
	FindClose(hFindFile);
	cout<<endl<<endl;
}
void Dos:: Cd(string path)//指定当前路径为上一级路径 
{
	char road[MAX_PATH];

	SetCurrentDirectory(path.c_str());//设置当前路径 
	GetCurrentDirectory(MAX_PATH,road);//获取当前路径 
	
	cout<<road<<endl<<endl;
}
void Dos::Cd()//返回上一级路径 
{
	char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,path);//获取当前路径 

	string a;
	a.assign(path);
	a.append("\\..\\");//转换 
	
	SetCurrentDirectory(a.c_str());//设置当前路径为之前的上一级路径 
	GetCurrentDirectory(MAX_PATH,path);//获取现在的路径 
	
	cout<<path<<endl<<endl;
}
void Dos::Dir()//输出文件和文件夹的信息 
{
	char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,path);
    cout<<path<<endl<<endl;
	strcat(path,"\\*.*");
	WIN32_FIND_DATA findFileData;
	HANDLE hFindFile=FindFirstFile(path,&findFileData);
	do//遍历查找 
	{
		if(findFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
		{
			cout<<"文件夹:"<<findFileData.cFileName<<endl; 
		}
		else
		{
			cout<<"文件: "<<findFileData.cFileName<<endl;
		}
	}while(FindNextFile(hFindFile,&findFileData)!=0);
	FindClose(hFindFile);
	cout<<endl<<endl;
		
}
void Work::solve()
{
		while (1)
	    {
	   	Dos dos;
		string command, object, other;
		cin >> command;
		if (command == "dir")
		{
			dos.Dir();
		}
		else if(command=="cd.." ) 
		{
			dos.Cd();
		}
		else if (command == "cd" ||command == "del" || command == "del/s")
		{
			cin >> object;
			if(command=="cd")
			{
				dos.Cd(object);
			}
			else if(command=="del"&&object=="*.jpg")
			{
				dos.DelJpg();
			}
			else if(command=="del"&&object=="*.*")
			{
				dos.DelAll();
			}
			else if(command=="del"&&object.rfind(".")!=-1)//删除空文件 
			{
				dos.DelEmpty();
			}
			else if(command=="del"&&object.rfind(".")==-1)//删除指定文件 
			{
				dos.DelFile(object);
			}
			else if(command=="del/s")//删处指定文件夹 
			{
				dos.Dls(object);
			}

		}
		else if (command == "copy"||command=="move") 
		{
			cin >> object >> other;
			if (command == "copy")//复制 
			{
				dos.Copy(object,other);
			}
			else if(command=="move")//移动 
			{
				dos.Move(object,other);
			}
		}
		else if (command == "exit")//退出 
		{
			exit(1);//退出 
		}
		
	    }
}
int main()
{
	Work work;
	work.solve();
	return 0;
}

欢迎指正

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值