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

📄 browsedir.cpp

📁 使用TEA加密方法的简单加密解密程序. 包含 COMMAND版本 和 WIN32 两个版本.可供初学者学习. 超级雷电
💻 CPP
字号:
/*********************************************

这是CBrowseDir的类实现文件 BrowseDir.cpp 

/***********************************************/ 
#include "stdlib.h" 
#include "direct.h" 
#include "string.h" 
#include "io.h" 
#include "list.h"
#include "BrowseDir.h" 
#include "conio.h"
#include "menu.h"
#include <iostream>

using namespace std;

CBrowseDir::CBrowseDir() 
{ 
//用当前目录初始化m_szInitDir 
method = 1;
getcwd(m_szInitDir,_MAX_PATH);

//如果目录的最后一个字母不是'\',则在最后加上一个'\' 
int len=strlen(m_szInitDir); 
if (m_szInitDir[len-1] != '\\') 
strcat(m_szInitDir,"\\"); 

strcpy(szCurrent, m_szInitDir);
strcpy(programDir, m_szInitDir);
prevDir.reinit(szCurrent);

} 

bool CBrowseDir::SetInitDir(const char *dir) 
{ 
//先把dir转换为绝对路径 
if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)
    return false;    

//判断目录是否存在 
if (_chdir(m_szInitDir) != 0) 
return false; 

//如果目录的最后一个字母不是'\',则在最后加上一个'\' 
int len=strlen(m_szInitDir); 
if (m_szInitDir[len-1] != '\\') 
strcat(m_szInitDir,"\\"); 
strcpy(szCurrent, m_szInitDir);

return true; 
} 

bool CBrowseDir::BeginBrowse(const char *filespec) 
{ 
ProcessDir(m_szInitDir,NULL); 
return BrowseDir(m_szInitDir,filespec); 
} 

bool CBrowseDir::BrowseDir 
(const char *dir,const char *filespec) 
{
    int flag = 1;
    int flush = 1;
    char topline[_MAX_PATH];
    char parent[_MAX_PATH];
    char drive[_MAX_PATH];
    _chdir(dir); 
    int select;
    List filelist, afilelist;
    List sublist, asublist;
    long hFile; 
    _finddata_t fileinfo;
    
    char sel[3];
    char ch;
    int count = 0;  
    while (1) { 
        
    if (flag) {
    if ((hFile=_findfirst(filespec,&fileinfo)) != -1) { 
        do { 
            if (!(fileinfo.attrib & _A_SUBDIR)) { 
                char filename[_MAX_PATH]; 
                strcpy(filename,szCurrent); 
                strcat(filename,fileinfo.name);
                afilelist.add(filename); 
                filelist.add(fileinfo.name);
                if (!ProcessFile(filename)) return false; 
            } 
        } while (_findnext(hFile,&fileinfo) == 0); 
        _findclose(hFile); 
    } 

    _chdir(dir); 
    if ((hFile=_findfirst("*.*",&fileinfo)) != -1) { 
        do { 
            if ((fileinfo.attrib & _A_SUBDIR)) { 
                if (strcmp(fileinfo.name,".") != 0 && strcmp (fileinfo.name,"..") != 0) { 
                                char subdir[_MAX_PATH]; 
                                strcpy(subdir,szCurrent); 
                                strcat(subdir,fileinfo.name); 
                                strcat(subdir,"\\"); 
                                asublist.add(subdir);
                                sublist.add(fileinfo.name);
                } 
            } 
        } while (_findnext(hFile,&fileinfo) == 0); 
        _findclose(hFile); 
    } 
    flag = 0;
    }
    if (flush) {
        system("CLS");
        cout<<"┌──────────────────────────────────────┐";
        sprintf(topline, "│【当前目录】:%-63.63s│", szCurrent);
        cout<<topline; 
        cout<<"└──────────────────────────────────────┘";   
        filelist.disfile();
        sublist.dissub(filelist.getlen());
        cout<<"【请选择文件或子目录】:__\b\b";
        flush = 0;
    }    
        //for (int u = 0; u < count; u++) cout<<sel[u];     
        ch = getch();
        if (ch == 46 && prevDir.getlen() > 0) {
                select = -1;
                break;
        }
        if (ch == 47 && prevDir.getlen() > 0) {
                select = -2;
                break;
        } 
        if (ch == 42 && strcmp(szCurrent, programDir)) {
                select = -3;
                break;
        }
        if (ch == 45) {
                sprintf(drive, "%c:\\", dir[0]-1);
                if (_chdir(drive) != 0) {
                    _chdir(dir);
                    continue;
                }    
                _chdir(dir);
                select = -4;  
                break;    
        } 
        if (ch == 43) {
                sprintf(drive, "%c:\\", dir[0]+1);
                if (_chdir(drive) != 0) {
                    _chdir(dir);
                    continue;
                }    
                _chdir(dir);
                select = -5;  
                break;    
        }      
        //if (ch == 0) continue;       
        if (ch == 27) {
            select = 0;
            break;
        }  
        if (ch == 9) {
            printAllInfo();
            flush = 1;
            continue;  
        }    
        if (ch == '\r') {
            select = atoi(sel);
            if (method == 0 && count == 0) {
                select = -6;
                break;
            }    
            if (method && select > 0 && select <= filelist.getlen()) break;
            if (select > filelist.getlen() && select <= filelist.getlen()+sublist.getlen() ) break; 
            continue;
        }    
        if (ch == '\b') {
            if (count > 0) {
                cout<<"\b_\b";
                count--;
            }    
            continue;
        }   
        if (!isdigit(ch)) continue; 
        if (count >= 2) continue;
        sel[count++] = ch;
        cout<<ch;
    }
    
    switch (select) {
        case -1 :    
                     if (strcpy(parent, prevDir.gettop()) ) {
                         strcpy(szCurrent, parent);
                         //ProcessDir(parent,dir);  
                         if (!BrowseDir(parent, filespec)) return false;
                     }    
                     break;
                     
        case -2 :    prevDir.reinit(szCurrent, 1);  
                     if (strcpy(parent, prevDir.gettop()) ) {
                         strcpy(szCurrent, parent);
                         if (!BrowseDir(parent, filespec)) return false;
                     }
                     break;
                     
        case -3 :    strcpy(szCurrent, programDir);
                     prevDir.reinit(programDir);  
                     if (!BrowseDir(programDir, filespec)) return false;
                     break;
                     
        case -4 :    prevDir.init();
                     prevDir.add(drive);
                     if (strcpy(parent, prevDir.gettop()) ) {
                         strcpy(szCurrent, parent);
                         if (!BrowseDir(parent, filespec)) return false;
                     }
                     break;
                     
        case -5 :    prevDir.init();
                     prevDir.add(drive);
                     if (strcpy(parent, prevDir.gettop()) ) {
                         strcpy(szCurrent, parent);
                         if (!BrowseDir(parent, filespec)) return false;
                     }
                     break;
                     
        case -6 :    getcwd(szSelectFile,_MAX_PATH);
                     break;
                     
        case  0 :    return false;
                     
        default :    if (select <= filelist.getlen()) {
                            strcpy(szSelectFile, afilelist.get(select));
                            break;
                     }    
                             
                     ProcessDir(asublist.get(select - filelist.getlen()),dir);   
                     if (!BrowseDir(asublist.get(select - filelist.getlen()),filespec)) return false;
                     break;
    }    


    
    return true; 
} 

bool CBrowseDir::ProcessFile(const char *filename) 
{ 
return true; 
} 

void CBrowseDir::ProcessDir(const char 
*currentdir,const char *parentdir) 
{
    if (currentdir)
    strcpy(szCurrent, currentdir);
    if (parentdir)
    prevDir.add(parentdir);
} 

bool CBrowseDir::GetFile(char* filedir)
{
    if (!szSelectFile) return false;
    strcpy(filedir, szSelectFile);
    return true;
}    

void CBrowseDir::SetMethod(int n)
{
    method = n;
}    
    
    

⌨️ 快捷键说明

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