zoukankan      html  css  js  c++  java
  • VC++ 文件系统

    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 要比较的子字符串中字符的最大数量。

    返回值

  • 相关阅读:
    String和StringBuilder和StringBuffer
    多态
    组件
    反向代理
    基础知识
    reflection
    v-model 与 v-bind:model
    tomcat端口占用问题
    socket
    简要概括内存机制
  • 原文地址:https://www.cnblogs.com/china-guoch/p/3315819.html
Copyright © 2011-2022 走看看