⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a_tree.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2005 Dump the directory in tree-like manner Build: a_tree*/#include "../src/wy_dirfile.h"#include "../src/wyfilestat.h"#include "../src/wy_lnkfile.h"#include "../src/wy_uty.h"// dirpath= pathname of directory to traverse// phdr   = header to print found filename of the directory//static WyRet traverse(const WyStr& dirpath, const WyStr& phdr)try { WyRet r; Wy_DirFile dirf; if((r=dirf.reset(dirpath))!=Ok) {   if(r==Wym_EACCES) {     Wy::cout << phdr << "(Error: Access denied)\n";     return(Ok);   }   WY_RETURN(r); } for(;;) {   WyDirEnt dent;   if((r=dirf.read(dent))!=Ok) {     WY_THROW(r);   }   if(dent.is_default()) {     return(Ok);   // No more entry   }   const WyStr FileName(dent.dt_name());   const WyStr SubPath( dirpath+'/'+FileName );   WyFileStat stt;   if((r=Wy::lstat(SubPath,stt))!=Ok) {     WY_HERE(r);     Wy::cerr << SubPath << "   " << Wy::wrd(r) << '\n';     continue;   }   Wy::cout << phdr << "+-> " << FileName;   if(stt.is_lnk()==true) {     Wy_LnkFile lnkf(SubPath);     WyStr value;     if((r=lnkf.read(value))!=Ok) {       Wy::cout << " (link read failure: " << Wy::wrd(r) << '\n';     } else {       Wy::cout << " (link to " << value << ", traverse ignored)\n";     }   } else if(stt.is_dir()==true) {     Wy::cout << '\n';     if((FileName==".")||(FileName=="..")) {       continue;     }     if((r=traverse(SubPath, phdr+"|   "))!=Ok) {       return(r);     }   } else {     Wy::cout << '\n';   } } // UNREACHABLE}catch(const Wy_DirFile::Reply& e) { WY_RETURN(e);}catch(const Wy_LnkFile::Reply& e) { WY_RETURN(e);}catch(const WyStr::Reply& e) { WY_RETURN(e);}catch(const WyByteFlow::Reply& e) { WY_RETURN(e);}catch(const WyRet& e) { WY_TERMINATE("unexpected Reply");}catch(...) { WY_TERMINATE("unknown throw type");};static const char* syntax=  "[Syntax]$./a_tree dirname\n";int main(int argc, char* argv[])try { const char* tree_dir="."; if(argc>2) {   Wy::cerr << syntax;   return(-1); } else {   if(argc==2) {     tree_dir=argv[1];   } } WyRet r; if((r=traverse(WyStr(tree_dir),WyStr()))!=Ok) {   Wy::cout << tree_dir << " .." << Wy::wrd(r) << '\n';   return(-1); } return(0);}catch(const WyRet& e) { if(e!=Ok) {   Wy::cerr << Wy::wrd(e) << '\n'; } return e->c_repcode();}catch(...) { Wy::cerr << "main caught(...)\n"; return(-1);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -