练习时长两年半的软件工程师


#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <windows.h>
#include <string.h>
#include <strings.h>

bool isExeFile(char *name, int length)
{
    if (name[length - 1] == 'e' && name[length - 2] == 'x' && name[length - 3] == 'e' && name[length - 4] == '.')
    {
        return true;
    }
    else if (name[length - 1] == 'E' && name[length - 2] == 'X' && name[length - 3] == 'E' && name[length - 4] == '.')
    {
        return true;
    }
    else
    {
        // printf("name[-1]=%c, name[-2]=%c, name[-3]=%c, name[-4]=%c\n", name[length - 1], name[length - 2], name[length - 3], name[length - 4]);
        return false;
    }
}

bool isCFile(char *name, int length)
{
    if ((name[length - 1] == 'c' || name[length - 1] == 'C') && name[length - 2] == '.')
    {
        return true;
    }
    else
    {
        // printf("name[-1]=%c, name[-2]=%c\n", name[length - 1], name[length - 2]);
        return false;
    }
}

bool isHFile(char *name, int length)
{
    if ((name[length - 1] == 'h' || name[length - 1] == 'H') && name[length - 2] == '.')
    {
        return true;
    }
    else
    {
        // printf("name[-1]=%c, name[-2]=%c\n", name[length - 1], name[length - 2]);
        return false;
    }
}

bool isCppFile(char *name, int length)
{
    if (name[length - 1] == 'p' && name[length - 2] == 'p' && name[length - 3] == 'c' && name[length - 4] == '.')
    {
        return true;
    }
    else if (name[length - 1] == 'P' && name[length - 2] == 'P' && name[length - 3] == 'C' && name[length - 4] == '.')
    {
        return true;
    }
    else
    {
        // printf("name[-1]=%c, name[-2]=%c, name[-3]=%c, name[-4]=%c\n", name[length - 1], name[length - 2], name[length - 3], name[length - 4]);
        return false;
    }
}

void SearchSpecialFile(char *pszDirectory)
{
    // 定义变量
    DWORD dwBufferSize = 2048;
    char *pszFileName = NULL;
    char *pTempSrc = NULL;
    BOOL bRet = FALSE;
    WIN32_FIND_DATA FileData = {0};

    char cmdstr[1024] = {0};
    int length = 0;
    char name[1024] = {0};
    bool find;

    // 申请动态空间
    pszFileName = new char[dwBufferSize];
    pTempSrc = new char[dwBufferSize];

    // 构造搜索字符串
    ::wsprintf(pszFileName, "%s\\*.*", pszDirectory);

    // 搜索第一个文件
    HANDLE hFile = ::FindFirstFile(pszFileName, &FileData);
    if (INVALID_HANDLE_VALUE != hFile)
    {
        do
        {
            // 过滤当前目录和上级目录,避免遍历死循环
            if ('.' == FileData.cFileName[0])
                continue;

            // 拼接路径
            ::wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileData.cFileName);

            // 判断是目录还是文件
            if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                // 目录,采用递归遍历
                SearchSpecialFile(pTempSrc);
            }
            else
            {
                length = strlen(pTempSrc);
                //如果不是c或者h文件,就加上标记
                if (!isCFile(pTempSrc, length) && !isHFile(pTempSrc, length) && !isCppFile(pTempSrc, length) && !isExeFile(pTempSrc, length))
                {
                    memset(name, 0, 1024);
                    snprintf(name, length, "%s", pTempSrc);
                    sprintf(name, "%sYSTSpecialFile.%c", pTempSrc, 'c');
                    // printf("SearchSpecialFile : %s\n", name);
                    rename(pTempSrc, name);
                }
            }
        } while (::FindNextFile(hFile, &FileData));
    }

    // 关闭句柄
    ::FindClose(hFile);

    // 释放内存
    delete[] pTempSrc;
    pTempSrc = NULL;
    delete[] pszFileName;
    pszFileName = NULL;
}

void SearchFile(char *pszDirectory)
{
    // 定义变量
    DWORD dwBufferSize = 2048;
    char *pszFileName = NULL;
    char *pTempSrc = NULL;
    BOOL bRet = FALSE;
    WIN32_FIND_DATA FileData = {0};

    char cmdstr[1024] = {0};
    int length = 0;
    char name[1024] = {0};

    // 申请动态空间
    pszFileName = new char[dwBufferSize];
    pTempSrc = new char[dwBufferSize];

    // 构造搜索字符串
    ::wsprintf(pszFileName, "%s\\*.*", pszDirectory);

    // 搜索第一个文件
    HANDLE hFile = ::FindFirstFile(pszFileName, &FileData);
    if (INVALID_HANDLE_VALUE != hFile)
    {
        do
        {
            // 过滤当前目录和上级目录,避免遍历死循环
            if ('.' == FileData.cFileName[0])
                continue;

            // 拼接路径
            ::wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileData.cFileName);

            // 判断是目录还是文件
            if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                // 目录,采用递归遍历
                SearchFile(pTempSrc);
            }
            else
            {
                length = strlen(pTempSrc);
                if (isCFile(pTempSrc, length) || isHFile(pTempSrc, length) /*|| isCppFile(pTempSrc, length)*/)
                {
                    memset(cmdstr, 0, 1024);
                    sprintf(cmdstr, "type %s > %s%s", pTempSrc, pTempSrc, "superDec"); //生成解密字串
                    // printf("%s\n", cmdstr);
                    system(cmdstr); //执行解密

                    memset(cmdstr, 0, 1024);
                    sprintf(cmdstr, "del %s", pTempSrc);
                    // printf("%s\n", cmdstr);
                    system(cmdstr);
                }
            }
        } while (::FindNextFile(hFile, &FileData));
    }

    // 关闭句柄
    ::FindClose(hFile);

    // 释放内存
    delete[] pTempSrc;
    pTempSrc = NULL;
    delete[] pszFileName;
    pszFileName = NULL;
}

void DecodeFile(char *pszDirectory)
{
    // 定义变量
    DWORD dwBufferSize = 2048;
    char *pszFileName = NULL;
    char *pTempSrc = NULL;
    BOOL bRet = FALSE;
    WIN32_FIND_DATA FileData = {0};

    char cmdstr[1024] = {0};
    int length = 0;
    char name[1024] = {0};
    char *find;
    bool special;

    // 申请动态空间
    pszFileName = new char[dwBufferSize];
    pTempSrc = new char[dwBufferSize];

    // 构造搜索字符串
    ::wsprintf(pszFileName, "%s\\*.*", pszDirectory);

    // 搜索第一个文件
    HANDLE hFile = ::FindFirstFile(pszFileName, &FileData);
    if (INVALID_HANDLE_VALUE != hFile)
    {
        do
        {
            // 过滤当前目录和上级目录,避免遍历死循环
            if ('.' == FileData.cFileName[0])
                continue;

            // 拼接路径
            ::wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileData.cFileName);

            // 判断是目录还是文件
            if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                // 目录,采用递归遍历
                DecodeFile(pTempSrc);
            }
            else
            {
                // 文件,打印
                // printf("%s\n", pTempSrc);
                length = strlen(pTempSrc);
                find = strstr(pTempSrc, "YSTSpecialFile");
                if (find != NULL)
                {
                    // printf("%s %d\n", pTempSrc,  length);
                    memset(name, 0, 1024);
                    snprintf(name, length - 24, "%s", pTempSrc);
                    // printf("decode : %s\n", name);
                    rename(pTempSrc, name);
                    continue;
                }

                find = strstr(pTempSrc, "superDec");
                if (find != NULL)
                {
                    // printf("%s %d\n", pTempSrc,  length);
                    memset(name, 0, 1024);
                    snprintf(name, length - 8, "%s", pTempSrc);
                    // printf("decode : %s\n", name);
                    rename(pTempSrc, name);
                }
            }
        } while (::FindNextFile(hFile, &FileData));
    }

    // 关闭句柄
    ::FindClose(hFile);

    // 释放内存
    delete[] pTempSrc;
    pTempSrc = NULL;
    delete[] pszFileName;
    pszFileName = NULL;
}

int main(int argc, char const *argv[])
{
    /* code */
    char path[] = ".";
    SearchSpecialFile(path);
    SearchFile(path);
    DecodeFile(path);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一位练习时长两年半的安卓练习生根据鸿神提供的WanAndroid开放Api来制作的产品级App,基本实现了所有的功能,采用Kotlin语言,基于Material Design AndroidX MVP RxJava Retrofit等优秀的开源框架开发,注释超详细,方便大家练手如果你觉得做的还可以对你有帮助,容我卑微地向你要个star,有任何问题或建议,欢迎提交issues前言前段时间学习了 Kotlin ,就打算写一个项目来练练手刷刷熟练度,因为经常逛鸿神的WanAndroid网站,觉得很不错,Api也很丰富健全, 虽然根据WanAndroidAPi开发出的app多如牛毛,有诸多优秀的app,但是每个人的喜好与审美不一样,所以都没有做到我心目中的最完美,于是我就想做一个自己觉得最满意的app。界面的话参考了很多的app风格,根据自己的搭配实现,感觉还不错吧实现的功能首页五大模块:首页 / 项目 / 体系/ 公众号 / 我的登录注册功能导航功能搜索功能 热门搜索推荐 搜索历史记录积分功能 积分排行 积分获取记录收藏功能 收藏文章 收藏网址待办清单 添加清单 编辑清单 删除清单文章网址详情 详情中收藏 分享 浏览器打开全局修改应用主题色全局修改列表的加载动画侧滑返回 可打开与关闭文章在任何地方收藏与取消,其他界面相对应的数据也会变化布局优化,大量使用ConstraintLayout集成Bugly收集bug并实现App更新APP下载GitHub下载fir.im下载扫码应用截图    主要开源框架一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的框架-RxJava2一个依赖注入框架-Dagger2处理网络请求的框架-Okhttp一个基于OKHttp封装的网络加载框架-Retrofit转换json数据的官方框架-GsonAndroid的事件发布-Eventbus项目核心库MVP框架-MVPArms屏幕适配AndroidAutoSize一个美丽的、流体和可扩展的对话框-Material-dialogs一个强大的Fragment管理库-Fragmentation一个增强BottomNavigationView的安卓库-BottomNavigationViewEx强大、可定制、易扩展的 ViewPager 指示器框架-MagicIndicator一个强大的轮播库-BGABanner-Android一个强大并且灵活的RecyclerViewAdapter-BaseRecyclerViewAdapterHelperRecyclerView侧滑菜单,Item拖拽,滑动删除Item,自动加载更多,HeaderView,FooterView,Item分组黏贴-SwipeRecyclerView揭示效果布局-RevealLayout优雅地处理加载中,重试,无数据-Loadsir基于Android WebView的一个强大的库-AgentwebAndroid流式布局-FlowLayout基于mmap内存映射的移动端通用 key-value 组件-MMKV侧滑返回-SmartSwipe全局捕捉异常防止崩溃-CustomActivityOnCrash素材来源阿里巴巴矢量图标库借鉴了花瓣的登录页goweii项目中的App图标特别感谢感谢鸿神的WanAndroid网站提供的开放API,我在issues提了一些自己的需求,鸿神也耐心的帮忙添加了,谢谢

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值