Loading

简单的文件清理,继续学习模块划分

简单的文件清理,继续学习模块划分#

1. 项目介绍#


1. 项目功能#

​ 通过生成exe文件,该程序可以清理所在目录及子目录中特定格式文件。

2. 项目思路#

递归 / 队列 篇幅有限,这里就简单讲讲递归方法

do
{
if(是文件&&是特定格式文件)
{
删除;
}
else if(是文件夹)
{
递归;
}
删除文件夹;
}while(查找不到文件)
3.所需函数#
  • ​ 关键

    struct _finddata_t fd; //用于保存文件信息的结构体
    _getcwd(); //获取执行exe文件的所在目录
    strstr(); // 用于检测文件格式
    _findfirst() / _findnext() / _findclose() //搜索 文件与文件夹
    remove() / rmdir() //删除 文件/文件夹
  • 非必须

    //设置控制台输出颜色
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
    //更快处理字符串
    sprintf();

2.具体实施#

​ 项目分为三个模块,客户端

client.c 客户交互

`clean.c` **核心模块**
`print.c` 输出到窗口显示删除状态
`clean.h` 头文件
  • clean.c

    #include <io.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <direct.h>
    #include "mydatastruct.h"
    char g_dir[SIZE]; //清理模块自身数据 , 路径
    char g_form[SIZE]; //清理模块自身数据 , 文件格式
    bool shutdown = false; //是否关机
    bool rancolor = false; //随机颜色
    void save(char *dir, char * form,bool color)//保存由客户端传来的数据
    {
    strcpy_s(g_dir,SIZE,dir);
    strcpy_s(g_form,SIZE, form);
    rancolor = color;
    }
    bool is_form(const char *name)// 检测是否为要清理的文件
    {
    if( !name )return 0;
    while( name&&*name != '.' )
    ++name;
    return strstr(g_form, name);
    }
    void delete_file1(char *dir, char * form,bool rancolor)
    {
    long hand;
    struct _finddata_t file;
    char info[SIZE];
    sprintf_s(info, SIZE, "%s\\*.*", dir);
    hand = _findfirst(info, &file);//失败返回-1
    if( hand == -1 )return;
    _findnext(hand, &file);
    while( _findnext(hand, &file) == 0 )//先删文件
    {
    if( file.attrib != _A_SUBDIR )
    {
    char temp[SIZE];
    sprintf_s(temp, SIZE,"%s\\%s" ,dir, file.name);
    if( is_form(file.name) )
    {
    remove(temp);
    print(temp, true,rancolor);
    }
    else print(temp, false,rancolor);
    }
    }
    _findclose(hand);
    hand = _findfirst(info, &file);//失败返回-1
    if( hand == -1 )return;
    _findnext(hand, &file);
    while( _findnext(hand, &file) == 0 )//再文件夹
    {
    if( file.attrib == _A_SUBDIR )//转换句柄,进入子文件夹
    {
    char temp[SIZE];
    sprintf_s(temp, SIZE, "%s\\%s", dir, file.name);
    delete_file1(temp, form,rancolor);
    }
    }
    _findclose(hand);
    if( !_rmdir(dir) )
    print(dir, true,rancolor);
    else {
    print(dir, false,rancolor);
    //printf("%d\n", errno);
    }
    }
    void delete_file(char *dir, char * form,int color)
    {
    save(dir, form,color);
    delete_file1(g_dir, g_form,rancolor);
    }
  • client.c

    #include <stdio.h>
    #include "clean.h"
    int main( )
    {
    char form[SIZE] = ".txt/.bmp";
    char dir[SIZE];
    _getcwd(dir, SIZE);
    delete_file(dir, form,1);
    getchar( );
    }
  • print.c

    #include <stdio.h>
    #include <Windows.h>
    void print(const char *str, int flag,int rancolor)
    {
    int random;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    if( !rancolor )
    {
    SetConsoleTextAttribute(hConsole, \
    flag ? FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE \
    : FOREGROUND_RED | FOREGROUND_INTENSITY);
    }
    else
    {
    // srand(time(NULL));
    random = rand()%16+1;
    SetConsoleTextAttribute(hConsole, random);
    }
    if( flag )
    {
    printf("[OK] %s\n", str);
    printf("%d\n", random);
    }
    else
    {
    printf("[ER] %s\n", str);
    printf("%d\n", random);
    }
    SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    }
    //void print_color(void)
    //{
    // HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    // for( int i = 0; i < 33; ++i )
    // {
    // SetConsoleTextAttribute(hConsole, i);
    // printf("%d: coooooooooooooolor \n", i);
    // }
    //
    //}
  • clean.h

    #define SIZE 256
    void delete_file(char *dir, char * form,int rancolor);

作者:chenyun

出处:https://www.cnblogs.com/starrys/p/11297746.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   沉云  阅读(142)  评论(0编辑  收藏  举报
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示