Visual C++中实现文件间批量转换功能
一、前言
本人在开发惠普色谱工作站增强软件的过程中,实现了把指定目录下的色谱数据文件全部转换成纯文本文件的功能。下面,通过用一个具体的例子来说明此功能的实现方法。
(www.iocblog.net 文章来源)
全部代码用visual c++6.0在windows95/98/2000下编译通过。
二、实例
首先用mfc appwizard生成一个sdi风格的应用程序test,生成过程中全部使用缺省设置。
其次,利用资源编辑器,在主菜单“文件”下增加一个菜单项“转换”,属性为:
id:id_convert
caption: 转换
prompt: 在不同格式文件之间进行转换转换文件
然后用“ctrl-w”热键激活mfc classwizard,为cmainframe类增加响应id_convert消息的命令函数onconvert()。加入转换功能的代码如下所示:(www.iocblog.net 文章来源)
| void cmainframe::onconvert() { lpmalloc pmalloc;//利用shell扩展功能 browseinfo bi; if (succeeded(shgetmalloc(&pmalloc)))//为生成目录选择对话框分配自由内存 { zeromemory(&bi,sizeof(bi));//清零分配的空间 char pszdirname[max_path];//存放选择的目录名 lpitemidlist pidl; bi.hwndowner = getsafehwnd(); bi.pidlroot = null; bi.pszdisplayname = pszdirname; bi.lpsztitle = _t("选择要批量转换文件所在的目录"); bi.ulflags = bif_returnfsancestors | bif_returnonlyfsdirs; bi.lpfn = null; bi.lparam = 0; if ((pidl = ::shbrowseforfolder(&bi)) != null)//调用选择目录对话框 { if (::shgetpathfromidlist(pidl, pszdirname))//获得所选择的目录 { file://设置选择的目录为当前目录,以便查找 setcurrentdirectory(pszdirname); file://定义一个查找 cfilefind findch1; cstring strconv; cstring strsour; if(findch1.findfile("*.ch1"))//在当前目录进行查找 { cfile sourcefile; cstdiofile targetfile; bool bfindresult; do { file://查找下一个符合条件的文件 bfindresult= findch1.findnextfile(); file://获得查找到的文件名 strsour=findch1.getfilepath(); strconv=strsour; file://把文件名转换为小写 strconv.makelower(); file://把*.ch1类型的文件转换为*.txt strconv.replace(".ch1",".txt"); file://打开*.ch1类型的文件作为源文件 sourcefile.open(strsour,cfile::moderead); file://打开*.txt类型的文件作为目标文件 targetfile.open(strconv,cfile::modecreate|cfile::modewrite); file://此处调用*.ch1类型的文件的解码函数 file://此处调用转换成文本文件的函数 file://文件使用完毕,要关闭 sourcefile.close(); targetfile.close(); }while(bfindresult); messagebox("转换完毕!","转换完毕!",mb_ok); } else { messagebox("没找到ch1文件","没找到",mb_ok); } findch1.close();//关闭这个搜索 } pmalloc->free(pidl);//释放使用完的资源 } pmalloc->release();//释放使用完的资源 } } |
编译并运行程序,选择“文件”菜单下的“转换”命令, 选择一个目录就完成了对此目录下所有具有.ch1扩展名的文件的转换工作。
三、结论
本程序利用了windows95/98/2000下的shell扩展功能,实现了对一个用户指定目录的拾取,再利用mfc的cfilefind类,来检索出所有想要转换的源文件,最后通过编码转换把源文件内容输出到指定类型的目标文件。这个方法也适合于要大量在不同格式的文件之间进行转换的工作,如图形文件、声音文件等的转换。希望有兴趣的朋友和我交流讨论。
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。