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