📄 extracmd.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 + -