Visual C++實現檔案間批次轉換功能 (轉)
Visual C++實現檔案間批次轉換功能 (轉)[@more@]Visual C++實現間批次轉換功能
唐翊國
一、前言
本人在開發惠普色譜工作站增強的過程中,實現了把指定目錄下的色譜資料檔案全部轉換成純文字檔案的功能。下面,透過用一個具體的例子來說明此功能的實現方法。
全部程式碼用Visual C++6.0在95/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;//利用擴充套件功能
BROWSEINFO bi;
if (SUCCEEDED(SHGetMalloc(&pMalloc)))//為生成目錄選擇對話方塊分配自由
{
ZeroMemory(&bi,sizeof(bi));//清零分配的空間
char pszDirName[MAX_PATH];//存放選擇的目錄名
LPITEMIDLIST pidl;
bi.hwndOwner = GetSafeHwnd();
bi.pidl = 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 File;
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://此處呼叫轉換成文字檔案的函式
唐翊國
一、前言
本人在開發惠普色譜工作站增強的過程中,實現了把指定目錄下的色譜資料檔案全部轉換成純文字檔案的功能。下面,透過用一個具體的例子來說明此功能的實現方法。
全部程式碼用Visual C++6.0在95/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;//利用擴充套件功能
BROWSEINFO bi;
if (SUCCEEDED(SHGetMalloc(&pMalloc)))//為生成目錄選擇對話方塊分配自由
{
ZeroMemory(&bi,sizeof(bi));//清零分配的空間
char pszDirName[MAX_PATH];//存放選擇的目錄名
LPITEMIDLIST pidl;
bi.hwndOwner = GetSafeHwnd();
bi.pidl = 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 File;
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類,來檢索出所有想要轉換的原始檔,最後透過編碼轉換把原始檔內容輸出到指定型別的目標檔案。這個方法也適合於要大量在不同格式的檔案之間進行轉換的工作,如圖形檔案、檔案等的轉換。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996148/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用UiBot實現批次html轉換成PDF檔案UIHTML
- 如何實現檔案轉換與線上預覽功能
- Visual C++ 6.0程式設計實現列印功能(轉)C++程式設計
- iWork Converter for Mac(iWork檔案批次轉換工具)Mac
- RGB和HSL之間的轉換 C++實現C++
- Python實現批次將ppt轉換為pdfPython
- 也用 C++ 實現 Property 功能 (轉)C++
- JPG轉PDF如何實現?圖片批次轉換PDF的快捷方法
- Matlab批量實現圖片檔案格式轉換Matlab
- Json檔案轉換為Excel檔案!涉及讀檔案,時間戳轉化,寫文件JSONExcel時間戳
- 如何實現將markdown檔案實時轉換為html文件HTML
- 用C++實現下載檔案的功能C++
- C/C++ 時間轉換與表示C++
- 【轉】find命令批次修改檔案字尾
- 在Visual C++中使用fopen()函式來讀寫檔案 (轉)C++函式
- 在Visual C++中利用UDL檔案建ADO連線(轉)C++
- 教程:如何通過DLA實現資料檔案格式轉換
- PDF檔案轉換為DWF檔案
- WOR檔案轉換成GST檔案
- tkprof 轉換trc檔案
- 用Visual C++實現圖象漸顯和漸隱 (轉)C++
- DOS/Windows和Linux/Unix間檔案格式轉換WindowsLinux
- 在vim中實現批次加密(轉)加密
- C++實現任意進位制的相互轉換C++
- 用Aspose-Java免費實現 PDF、Word、Excel、Word互相轉換並將轉換過得檔案上傳OSS,返回轉換後的檔案路徑JavaExcel
- Cisdem PDFMaster for MacPDF批次轉換工具ASTMac
- 將Schema檔案轉換為Java檔案Java
- ASM 檔案與本地檔案的轉換ASM
- 如何在 Unix 和 DOS 格式之間轉換文字檔案
- 透過XSL轉換XML檔案 (轉)XML
- heic檔案如何轉換jpg?
- plist檔案格式轉換器
- Linux轉換檔案格式Linux
- asp實現批次錄入資料的實現 (轉)
- caj檔案怎麼轉換成word文件,簡單的檔案格式轉換教程
- 【轉】c++ http下載檔案C++HTTP
- jQuery物件和DOM物件之間的轉換實現jQuery物件
- golang實現檔案上傳並轉存資料庫功能詳解Golang資料庫