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

📄 extracmd.cpp

📁 用C实现的本地服务器
💻 CPP
字号:
/***
*extracmd.cpp - 附加功能各函数
*
*   编写者:李拓,王慧松
*
*   完成时间:2008年11月15日
*
*   修改时间:
*
****/
#include "StdAfx.h"
#include "Head.h"
//重命名文件(附加功能)
void Renamedir(char *oldfilename,char *newfilename)
{	
	if (access(oldfilename,0)==-1)                         //检验重命名是否存在
	{
		printf("找不到指定的文件\n");
		return;
	}
	if (access(newfilename,0)==0)                          //检验新文件名是否与已有文件的文件名冲突
	{
		printf("文件%s已存在\n",newfilename);
		return;
	}
	if (rename(oldfilename,newfilename)!=0)
	{
		printf("未能成功重命名文件%s",oldfilename);
	}
}

//递归显示文件和文件夹
void List_R()
{
	struct _finddata_t c_file;                          //定义结构体保存属性信息
	long hFile;
	int fnumber=0;                                      //记录所给目录中全部的文件和文件夹数
	char buffer[30];
	int iffolder;                                       //记录是否为文件夹
	char dirnow[255];                                   //记录当前目录
	
	//查找指定路径中的第一个文件
	if( (hFile = _findfirst( "*", &c_file )) == -1L )
		printf( "系统出现错误!\n" );
	else
	{
		do 
		{
			//文件名为“.”或“..”,则执行continue
			if (strcmp(c_file.name,".")==0||strcmp(c_file.name,"..")==0)
			{
				continue;
			}
			fnumber++;
			
			strcpy(buffer,ctime(  &c_file.time_create ));
			printf( "%.24s  ",buffer);
			iffolder=Ifdir(c_file.name);
			if (iffolder==0)                            //是文件夹
			{
				printf("       dir    ");
			}
			else if (iffolder==1)                       //是文件
			{
				printf("%9ldB    ",c_file.size);
			} 
			else                                        //出现异常
			{
				return;
			}			
			printf("%-20s ",c_file.name);
			printf("\n");
			if (iffolder==0)
			{
				getcwd(dirnow,255);
				chdir(c_file.name);
				printf("{\n");
				List_R();
				printf("}\n");
				chdir(dirnow);
			}
		} while( _findnext( hFile, &c_file ) == 0 );
		if (fnumber==0)
		{
			printf("所给目录为空\n");
		}
		_findclose( hFile );
	}
}

//显示当前目录
void Pwd(char *username)
{
	char rootdir[255];                                  //文件服务器根目录所在操作系统的路径
	char sysdirnow[255];                                //操作系统的当前路径
	char dirnow[255]="~";                               //文件服务器当前路径
	getcwd(sysdirnow,255);
	Severroot(rootdir,username);
	strcpy(sysdirnow,sysdirnow+strlen(rootdir));
	strcat(dirnow,sysdirnow);
	puts(dirnow);
}

//输出文本文件的内容
void Type(char *filename)
{
	FILE *fp;
	char a;
	if ((fp=fopen(filename,"rt"))==0)
	{
		printf("文件%s不存在\n",filename);
		return;
	}
	if (IfmatchA(filename,".txt")==0)
	{
		printf("所给文件不是文本文件\n");
		fclose(fp);
		return;
	}
	while (feof(fp)==0&&(a=fgetc(fp))!=EOF)
	{
		printf("%c",a);
	}
	printf("\n");
}

//复制文件
void cpy_file(char * Sour_adr,char * To_adr)
{
	FILE * FromF,* ToF;
	char ch,choice;
	int n;
	char buf[250];
	getcwd(buf,sizeof(buf));
	char souradr[255];
	strcpy(souradr,Sour_adr);
	strcpy(To_adr,chuli(souradr,To_adr));
	n=strlen(buf);
	if (souradr[0]!='\\')
	{
		strcat(buf,"\\");
	}
	
	strcat(buf,souradr);

	if (To_adr[0]=='\\')
	{
		strcpy(To_adr,To_adr+1);
	}
	if ((FromF=fopen(buf,"rb+"))==NULL)                          //判断文件和路径是否正确
	{
		printf("文件不存在");
		return;
	}
	if(!access(To_adr,0))                                        //判断目的文件夹是否有相同文件名的文件	
	{
		printf("有文件名相同的文件存在,要覆盖吗?(Y/N)");	     //有则询问用户选择,Y 是;N 否
		scanf("%c",&choice);
		while(choice!='y'&&choice!='n'&&choice!='Y'&&choice!='N')//输入错误,重新输入
		{
			printf("选择错误,请重新选择(Y/N)");
			fflush(stdin);
			scanf("%c",&choice);
		}
	}
	if(access(To_adr,0)||choice=='Y'||choice=='y')               //若文件不同名或用户选择覆盖原文件
	{
		if ((ToF=fopen(To_adr,"wb+"))==NULL)
		{
			printf("目标路径不存在");
			return;
		}
		while ((ch=fgetc(FromF))!=EOF)                           //转移
		{
			fputc(ch,ToF);
		}
		fclose(ToF);
	}
	else                                                         //用户取消命令
		printf("命令已取消");
	fclose(FromF);
}

//移动文件
void mv_file(char * Sour_adr,char * To_adr)
{
	cpy_file(Sour_adr,To_adr);
	Removefile(Sour_adr);
}

//上传文件夹
void Fupload(char * p1,char * p2)				
{
	struct _finddata_t c_file;                                  //定义结构体保存属性信息
	long hFile;
	char dirnow[255];
	char buf[255];                                              //保存所建立文件夹路径
	char foldername[250];
	int iffolder;
	unsigned i;
	getcwd(buf,255);
	strcpy(dirnow,buf);
	for(i=strlen(p1)-1;i>=0;i--)                                //获取上传的文件夹的名字
	{
		if (p1[i]=='\\')
		{
			break;
		}
	}
	strcpy(foldername,p1+i+1);

	chdir(p1);
	chdir("..");
	if (Ifdir(foldername)!=0)                                   //如果不是文件夹
	{
		printf("所给文件夹不存在\n");
		chdir(dirnow);
		return;
	}
	
	if (p2[0]!='\\')
	{		
		strcat(buf,"\\");
	}
	strcat(buf,p2);
	chdir(buf);

	if ((_access( buf, 0 )) == -1)
	{
		printf("目标路径不存在\n");
		chdir(dirnow);
		return;
	}
	if ((_access( p1, 0 )) == -1)
	{
		printf("所给文件夹不存在\n");
		chdir(dirnow);
		return;
	}


	mkdir(foldername);
	chdir(p1);

	if( (hFile = _findfirst( "*", &c_file )) == -1L )
	{
		printf( "系统出现错误!\n" );
		chdir(dirnow);
		return;
	}
	else
	{
		do 
		{
			//文件名为“.”或“..”,则执行continue
			if (strcmp(c_file.name,".")==0||strcmp(c_file.name,"..")==0)
			{
				continue;
			}

			iffolder=Ifdir(c_file.name);
			if (iffolder==0)                                      //是文件夹
			{
				
				char folddir[255];
				strcpy(folddir,p1);
				strcat(folddir,"\\");
				strcat(folddir,c_file.name);
				chdir(buf);
				Fupload(folddir,foldername);
				chdir(p1);
			}
			else if (iffolder==1)                                 //是文件
			{
				char filedir[255];
				strcpy(filedir,p1);
				strcat(filedir,"\\");
				strcat(filedir,c_file.name);
				chdir(buf);
				char fname[50];
				strcpy(fname,foldername);
				upload(filedir,fname);
				chdir(p1);
			} 
			else                                                    //出现异常
			{
				chdir(dirnow);
				return;
			}			
		} while( _findnext( hFile, &c_file ) == 0 );
		chdir(dirnow);
		_findclose( hFile );
	}

}

//显示文件或文件夹属性
void File_Atr(char * file_adr)
{
	
	struct _finddata_t file;
	long buf;
	if((buf=_findfirst(file_adr,&file))==-1L)   
		printf("找不到该文件\n" );
	else
	{
		printf("文件属性列表:\n");
		printf("NAME:\t\t\t%s\n",file.name);
		printf("CRE_TIME:\t\t%s\n",ctime(&(file.time_create)));
		printf("Last_RW_TIME:\t\t%s\n",ctime(&(file.time_write)));
		if (Ifdir(file.name)==1)
		{
			printf("SIZE:\t\t\t%d Byte\n",file.size);
		}
		else
		{
			printf("SIZE:\t\t\tdir\n");
		}
		printf("是否是只读文件:\t\t%s\n",((file.attrib&_A_RDONLY)?"Y":"N"));
		printf("是否是系统文件:\t\t%s\n",((file.attrib&_A_SYSTEM)?"Y":"N"));
		printf("是否是隐藏文件:\t\t%s\n",((file.attrib&_A_HIDDEN)?"Y":"N"));
		_findclose(buf);
	}
}

⌨️ 快捷键说明

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