程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 用Visual C++實現文件間批量轉換的功能

用Visual C++實現文件間批量轉換的功能

編輯:vc教程

  一、前言

  本人在開發惠普色譜工作站增強軟件的過程中,實現了把指定目錄下的色譜數據文件全部轉換成純文本文件的功能。下面,通過用一個具體的例子來說明此功能的實現方法。

  全部代碼用Visual C++6.0在Windows95/98/2000下編譯通過。

  二、實例

  首先用MFC AppWizard生成一個SDI風格的應用程序test,生成過程中全部使用缺省設置。

  其次,利用資源編輯器,在主菜單“文件”下增加一個菜單項“轉換”,屬性為:

   ID:ID_CONVERT

   Caption: 轉換

   Prompt: 在不同格式文件之間進行轉換轉換文件

  然後用“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類,來檢索出所有想要轉換的源文件,最後通過編碼轉換把源文件內容輸出到指定類型的目標文件。這個方法也適合於要大量在不同格式的文件之間進行轉換的工作,如圖形文件、聲音文件等的轉換。希望有興趣的朋友和我交流討論。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved