• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC++實現文件間批量轉換功能

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    一、前言 本人在 開發 惠普色譜工作站增強軟件的過程中,實現了把指定目錄下的色譜數據文件全部轉換成純文本文件的功能。下面,通過用一個具體的例子來說明此功能的實現方法。 全部代碼用Visual C++6.0在 Windows 95/98/2000下編譯通過。 二、實例 首先用MFC
      一、前言

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

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

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>