文件粉碎機原理:文件被刪除之前,用隨機字符對其進行寫操作
(注:參考的教材使用的是BCB編譯器,BCB不會,所以這裡改成使用MFC)
一、
首先建立一個基於對話框的MFC工程,在對話框添加如圖所示控件
m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRAW, CRect(0,0,0,0), this, 0); int strPartDim[2]= { 400, -1}; //分割成左右兩份,左邊占400個像素 m_StatusBar.SetParts(2, strPartDim);
設置好之後,我們用CStatusBarCtrl::SetText()就可以在狀態欄上顯示文字了。
注意,VC6.0中,狀態欄不能在資管控件中直接添加,而是需要使用程序來創建,因此,也只有在程序運行之後才能顯示出來
三、
下面來添加對話框控件的響應。首先點擊浏覽要彈出打開文件對話框,點擊文件夾的文件,令點擊的文件名顯示在左邊的文本編輯框中。
1、首先為文本編輯框關聯一個名為m_strPath 的成員變量。按下ctrl+w,選擇編輯控件ID,添加成員變量,輸入m_strPath
2、雙擊 浏覽按鈕,進入響應函數,在裡面添加如下代碼:
// TODO: Add your control notification handler code here UpdateData(TRUE); CFileDialog fileDlg(TRUE); fileDlg.m_ofn.lpstrTitle="打開文件"; fileDlg.m_ofn.lpstrFilter="All Files(*.*)\0*.*\0\0"; fileDlg.m_ofn.lpstrDefExt="*.txt"; if(IDOK==fileDlg.DoModal()) { CFile file(fileDlg.GetFileName(),CFile::modeRead); m_strPath=fileDlg.GetPathName(); //將文件名賦給m_strPath UpdateData(FALSE); //立即顯示出來 }
四,主程序,雙擊開始粉碎,添加按鈕響應。
添加如下代碼:
if(m_strPath=="") { return; } if((MessageBox("文件一旦刪除將無法恢復,您確定要繼續執行操作嗎?","提醒",MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2))==IDCANCEL) { m_StatusBar.SetText(_T("您取消了操作"), 0, 0); //設置狀態欄文本提示信息 return; } char buff[1024]={0}; HANDLE hFile=CreateFile(m_strPath,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,NULL,NULL); DWORD dwLen=SetFilePointer(hFile,0,NULL,FILE_END); CString temp; temp.Format("文件大小%dbyte",dwLen); m_StatusBar.SetText(temp, 0, 0); for(int i=0;i<3;i++) { temp.Format("共進行%d遍擦除",i+1); m_StatusBar.SetText(temp, 0, 0); SetFilePointer(hFile,0,NULL,FILE_BEGIN); if(dwLen<=1024) { dwLen=WriteFile(hFile,buff,(dwLen<sizeof(buff))?dwLen:sizeof(buff),&dwLen,NULL); } } CloseHandle(hFile); if(!DeleteFile(m_strPath)) { m_StatusBar.SetText(_T("文件刪除失敗,但已無法恢復"), 0, 0); }
五、
添加取消按鈕的響應,雙擊,寫個OnOK();就行了
程序運行效果: