论坛登陆 用户: 密码:
联系我们
设为首页
加入收藏
业界新闻 网络编程 程序开发 网页图象 聊天通讯 软件应用 网络安全 硬件学堂 教育频道 站长club
首页>>程序开发>>vc编程>>文章正文

用visual c++实现文件间批量转换的功能


 日期:2005-7-18 9:12:08     来源:易特网络技术   编辑:黑鹰  点击:

  一、前言

  本人在开发惠普色谱工作站增强软件的过程中,实现了把指定目录下的色谱数据文件全部转换成纯文本文件的功能。下面,通过用一个具体的例子来说明此功能的实现方法。

  全部代码用visual c++6.0在windows95/98/2000下编译通过。

  二、实例

  首先用mfc appwizard生成一个sdi风格的应用程序test,生成过程中全部使用缺省设置。

  其次,利用资源编辑器,在主菜单“文件”下增加一个菜单项“转换”,属性为:

   id:id_convert

   caption: 转换

   prompt: 在不同格式文件之间进行转换\n转换文件

  然后用“ctrl-w”热键激活mfc classwizard,为cmainframe类增加响应id_convert消息的命令函数onconvert()。加入转换功能的代码如下所示:

   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类,来检索出所有想要转换的源文件,最后通过编码转换把源文件内容输出到指定类型的目标文件。这个方法也适合于要大量在不同格式的文件之间进行转换的工作,如图形文件、声音文件等的转换。希望有兴趣的朋友和我交流讨论。


上一篇:图像平滑滚动效果的vc实现
下一篇:谈在vc中动态改变菜单
[发送给好友] [打印本页] [关闭窗口] [返回顶部转载请注明来源:http://www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 黑鹰 投稿作者: 易特网络
信息来源: 易特网络技术 录入时间: 2005-7-18 9:12:08
浏览次数: 投稿信箱: shtghy@163.com
设置首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights ©2004-2005 iyit.net all rights reserved. 网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息