C语言实现批量截图带撕边效果 二

接上文《C语言实现批量截图带撕边效果》,有了上文的分析。我们就可以开始编写程序了。根据上文的分析结果,我们要实现以下几个模块。

模块一:实现目标位置的配置

模块二:实现文件名的按时间生成

模块三:执行保存文件操作

 

程序的配置:

如何实现目标路径的配置呢?很显然,我们希望用户可以自定义路径。要实现这一点,我们可以让用户把要设定的路径写到文本中,通过程序来读取这个文本的值,并把它设定为目标路径的值。

为了方便起见,我们首先定义一个全局结构变量。

//全局配置变量
struct Global
{
         char path[256]; //目标路径
         char des[256]; //目标文件名
         char src[256]; //源文件路径
}config;
 


这样,从文件读取出来的路径,就可以保存到config.path中。

 

有了存储结构后,我们可以从配置文件中读出路径,并把该路径赋值给config.path。赋值完后,就可以在另外一个模块中,直接使用config.path的值了。

设置路径

void SetPath()
{
         char defaultPath[] ="D:\\img";
         charconfigPath[MAX_PATH];
 
         GetCurrentDirectory(MAX_PATH,configPath);//获取当前软件的运行目录
         strcat(configPath,"\\config");
         char tmp[256];//存放临时读取到的文件路径
 
         printf("\n配置的目录:%s\n",configPath);
         //判断配置文件是否存在
         if(CheckFile(configPath))
         {
                   FILE * fp =fopen(configPath, "r");
                   if(fp !=NULL)
                   {
                            //判断读取到的文件目录是否正确
                            fgets(tmp,256, fp);
                            if(tmp[strlen(tmp)-1] == '\n')
                                     tmp[strlen(tmp)- 1 ] = 0;
                            printf("\n要保存的目录:%s\n",tmp);
                            if(IsDir(tmp))
                            {
                                     strcpy(config.path,tmp);
                                     return;
                            }
                   }
                   fclose(fp);
         }
 
         //如果缺省文件目录不存在,就去创建
         if(!(CheckFile(defaultPath) && IsDir(defaultPath) ) )
         {
                   strcpy(tmp,"mkdir ");
                   strcat(tmp,defaultPath);
                   system(tmp);
         }
         //如果配置文件不存在,就使用缺省路径
         strcpy( config.path,defaultPath );
}

上述代码中,用到了判断某一文件是否为文件夹,该函数是封装WIN32 API而来的。

判断是否为文件夹

int IsDir(char* path)
{
         DWORD attr =GetFileAttributes(path);
         if(attr ==INVALID_FILE_ATTRIBUTES)
         {
                   printf("\n路径:%s   路径错误\n", path);
                   return 0;
         }
         if (attr &FILE_ATTRIBUTE_DIRECTORY)
         {
                   return 1;
         }
         return 0;
}

经过上述的读取之后,接下来要做的就是,把文件A复制到文件B。我们可以用WIN32的ReadFile和WriteFile,也可以使用CopyFile.这里我们使用控制台的命令copy A B

移动文件

void ExecMove()
{
         char cmd[256];
         strcpy(cmd, "copy");
         strcat(cmd,config.src);
         strcat(cmd, "");
         strcat(cmd,config.path);
         strcat(cmd,"\\");
         strcat(cmd,config.des);
 
         printf("\n%s",cmd);
         system(cmd);
 
}

在截图的时候,要完成批量截图,那么截图的命名也是我们需要考虑的。既要保证唯一,又要保证有一定的意义。所以,我们可以采用以系统时间来命名的方式。

实现命名

void SetName()
{
         char tmp[10]; //临时变量,存放日期转换后的字符串
         char name[256]; //目标文件名
 
         time_t rawtime;
         struct tm* timeinfo;
         time(&rawtime);
         timeinfo = localtime(&rawtime);
         strcpy(name,"IMG_");
         //连接年
         itoa(timeinfo->tm_year+1900,tmp, 10);
         strcat(name, tmp);
         //连接月
         itoa(timeinfo->tm_mon+1, tmp, 10);
         strcat(name, tmp);
         //连接日
         itoa(timeinfo->tm_mday,tmp, 10);
         strcat(name, tmp);
         //分割符
         strcat(name,"_");
         //连接小时
         itoa(timeinfo->tm_hour,tmp, 10);
         strcat(name, tmp);
         //连接分钟
         itoa(timeinfo->tm_min,tmp, 10);
         strcat(name, tmp);
         //连接秒
         itoa(timeinfo->tm_sec,tmp, 10);
         strcat(name, tmp);
         //加文件后缀名
         strcat(name,".bmp");
         strcpy(config.des,name);//配置全局的目标名
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值