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