using namespace System;
using namespace System::IO;

void ShowHelpMsg(){
    Console::WriteLine(L"本程序可用的命令如下(命令全部用小写):");
    Console::WriteLine();
    Console::WriteLine(L"cd 子目录:进入指定的子目录,如 cd subdir");
    Console::WriteLine(L"dir:查看当前目录下的所有子目录和文件");
    Console::WriteLine(L"dirinfo:查看当前目录的属性");
    Console::WriteLine(L"exit:退出程序");
    Console::WriteLine(L"fileinfo 文件名:查看当前目录下的某个指定文件的属性,\
                        如 fileinfo ReadMe.txt");
    Console::WriteLine(L"help:显示本程序的帮助信息");
    Console::WriteLine(L"up:进入父目录");
}

//查看当前目录的所有子目录和文件
void OnDirdir(DirectoryInfo^ dir)
{
    array<DirectoryInfo^>^ Dirs=dir->GetDirectories();//获取所有子目录
    if(Dirs->Length>0)
    {
        for each(DirectoryInfo^ DirItem in Dirs)
        {//显示子目录的名字和创建时间
            Console::WriteLine(L"{0,-20}{1,-8}{2}",DirItem->Name,L"<DIR>",DirItem->CreationTime);
        }
    }
    array<FileInfo^>^ fileArr=dir->GetFiles();//获取所有文件
    if(fileArr->Length > 0)
    {
        for each(FileInfo^ fileItem in fileArr)
        {//显示文件的名字、长度和创建时间
            Console::WriteLine(L"{0,-20}{1,-8}{2}",fileItem->Name,fileItem->Length,fileItem->CreationTime);
        }
    }
}

//使用引用 因为要改变目录
void OnCD(String^ SubDirName,DirectoryInfo^& Dir)
{    
    //首先 检查子目录是否存在
    array<DirectoryInfo^>^ Dirs=Dir->GetDirectories();//获取所有子目录
    if(0==Dirs->Length)
    {
        Console::WriteLine(L"此目录下没有子目录!");
    }
    else
    {
        bool flag=false;
        for each(DirectoryInfo^ DirItem in Dirs)
        {
            if(DirItem->Name->Equals(SubDirName))
            {
                flag=true;
                Dir=DirItem;//设置指定名字的子目录
                break;
            }
        }
        if(!flag)
        {
            Console::WriteLine(L" 子目录{0} 不存在",SubDirName);
        }
    }
}

//查看当前目录的属性
void OnDirinfo(DirectoryInfo^ Dir)
{//以下的属性 FileInf类与DirectoryInfo类的共同属性 都是继承基类FileSystemInfo
    Console::WriteLine(L"Name:{0}",Dir->Name);//名称
    Console::WriteLine(L"CreationTime:{0}",Dir->CreationTime);//创建时间
    Console::WriteLine(L"LastAccessTime:{0}",Dir->LastAccessTime);//最后访问时间
    Console::WriteLine(L"LastWriteTime:{0}",Dir->LastWriteTime);//最后修改时间
    Console::WriteLine(L"Attributes:{0}",Dir->Attributes);//属性

}


//查看您当前目录下的指定文件的属性 :fileinfo 文件名
void OnFileInfo(DirectoryInfo^ Dir,String^ FileName)
{
    array<FileInfo^>^ Files=Dir->GetFiles();//获取所有文件
    //判断是否存在
    bool flag=false;
    if(Files->Length > 0)
    {
        for each(FileInfo^ fileItem in Files)
        {
            if(fileItem->Name->Equals(FileName))
            {
                
                //以下的属性 FileInf类与DirectoryInfo类的共同属性 都是继承基类FileSystemInfo
                Console::WriteLine(L"Name:{0}",fileItem->Name);
                Console::WriteLine(L"Extension:{0}",fileItem->Extension);
                Console::WriteLine(L"Length:{0}",fileItem->Length);
                Console::WriteLine(L"IsReadOnly:{0}",fileItem->IsReadOnly);
                Console::WriteLine(L"CreationTime:{0}",fileItem->CreationTime);
                Console::WriteLine(L"LastAccessTime:{0}",fileItem->LastAccessTime);
                Console::WriteLine(L"LastWriteTime:{0}",fileItem->LastWriteTime);
                Console::WriteLine(L"Attributes:{0}",fileItem->Attributes);
                flag=true;
                break;
            }
        }
    }
    if(!flag)
    {
        Console::WriteLine(L"此文件 {0} 不存在",FileName);
    }
}

int main(array<System::String ^> ^args)
{
    //获取当前目录
    System::String^ CurrentDir=Directory::GetCurrentDirectory();
    DirectoryInfo^ dir=gcnew DirectoryInfo(CurrentDir);
    while(1)
    {
        Console::WriteLine(dir->FullName+L">");
        //去处用户输入命令的头尾空白字符
        System::String^ cmd=Console::ReadLine()->Trim();
        if(cmd->Equals(L"exit"))
        {
            Environment::Exit(0);
        }
        else if(cmd->Equals(L"dir"))//显示当前目录下的所有子目录和文件
        {
            OnDirdir(dir);
        }
        else if(cmd->Equals(L"dirinfo"))//察看当前目录的属性
        {
            OnDirinfo(dir);
        }
        else if(cmd->Equals(L"help"))
        {
            ShowHelpMsg();
        }
        else if(cmd->Equals(L"up"))//切换到父目录
        {
            //达到根目录后就不能再向上了
            if(!dir->FullName->Equals(dir->Root->FullName))
            {
                dir=dir->Parent;
            }
        }
        else if(System::String::Compare(cmd,0,L"cd ",0,3)==0)//cd 切换到某个子目录
        {
            String^ DirName=cmd->Substring(3)->Trim();
            OnCD(DirName,dir);
        }
        else if( System::String::Compare(cmd,0,L"fileinfo ",0,9)==0)//查看指定文件的属性
        {
            String^ fileName=cmd->Substring(9)->Trim();
            OnFileInfo(dir,fileName);
        }
        else
        {
            Console::WriteLine(L"非法命令!!!!");
            ShowHelpMsg();
        }
    }

    //Console::WriteLine(L"Hello World");
    return 0;
}

其中System::String::Compare(cmd,0,L”fileinfo “,0,9) 函数原型如下:
public:
static int Compare(
String^ strA,
int indexA,
String^ strB,
int indexB,
int length
)

参数

strA
类型:System::String 要在比较中使用的第一个字符串。
indexA
类型:System::Int32 strA 中子字符串的位置。
strB
类型:System::String 要在比较中使用的第二个字符串。
indexB
类型:System::Int32 strB 中子字符串的位置。
length
类型:System::Int32 要比较的子字符串中字符的最大数量。

返回值

版权声明:本文为china-guoch原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/china-guoch/p/3315819.html