最近发现手机越来越卡,后来发现是QQ占用的内存太大了,尤其是居然有1.5G之多的shortvideo短视频,我这种人,老觉得这都是生活的记录,舍不得删,
那就导入到电脑上吧,但是导入之后发现是这个样子的。。。
点开之后是这个样子的:
学编程的怎么可能一个个的复制粘贴出来,当然是让程序替我们干这种活啊,大概想了一下思路: 首先在shortvideo文件夹下进行一次磁盘遍历,然后每找到一个mp4文件就把它复制出去到指定的目录下。 那么就是两个函数,一个遍历函数,一个复制函数
文件查找是大一时学过的,直接拿来用,复制的话就是把mp4文件以二进制方式读取,存入到一个超大的数组里,然后再以二进制的方式写入新目录。几行代码轻松搞定
直接上代码吧,万一以后自己又要用 (一个多G,十几秒左右就完成复制了,膜…)
#include<stdio.h>#include<string.h>#include<io.h>#include<iostream>#include<string>using namespace std;char ch[9999999999];char str[260];char newstr[260];void take(char Dir[],char newDir[])//复制函数{ FILE *f1,*f2; f1=fopen(Dir,"rb"); f2=fopen(newDir,"wb"); fseek(f1,0L,SEEK_END); int lens=ftell(f1);//取出原文件大小 rewind(f1); fread(ch,lens,1,f1); fwrite(ch,lens,1,f2); fclose(f1);fclose(f2);}void SearchDir(char *dir)//遍历函数{ _finddata_t ffblk;//文件结构体定义一个对象 long handle;//句柄 char tmp[1000]; strcpy(tmp, dir); strcat(tmp, "//*.*"); handle = _findfirst(tmp,&ffblk); long flag = 0; while (!flag) { if (ffblk.attrib == _A_SUBDIR) { if(strcmp(ffblk.name,".") == 0 || strcmp(ffblk.name,"..") == 0){ //筛掉这两个默认的文件夹,一个为当前目录,一个为上一级目录 flag = _findnext(handle, &ffblk); continue; } //PRintf("%s is a sub-directory/n", ffblk.name); char newDir[1000]; strcpy(newDir, dir); strcat(newDir, "//"); strcat(newDir, ffblk.name); SearchDir(newDir);//递归调用此函数遍历子文件夹 }else{ //printf("%s/n", ffblk.name); string a(ffblk.name); if(strcmp(a.substr(a.rfind('.')+1,a.length()-a.rfind('.')).c_str(),"mp4")==0){ char aaa[1000],bbb[1000]; strcpy(aaa,dir);strcat(aaa,"//");strcat(aaa,ffblk.name); strcpy(bbb,newstr);strcat(bbb,"//");strcat(bbb,ffblk.name); take(aaa,bbb);//复制出去 } } flag = _findnext(handle, &ffblk);//查询成功返回0,失败返回-1; }}int main(){ printf("请输入要遍历的文件夹和mp4文件要存放的新目录:/n"); scanf("%s%s",str,newstr); strcat(newstr,"//"); SearchDir(str); cout<<"完成复制!"<<endl; return 0;}写的比较潦草 哦,再附张结果图。。
新闻热点
疑难解答