程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 文件操作(2):文件粉碎機,文件操作文件粉碎機

文件操作(2):文件粉碎機,文件操作文件粉碎機

編輯:C++入門知識

文件操作(2):文件粉碎機,文件操作文件粉碎機


文件粉碎機原理:文件被刪除之前,用隨機字符對其進行寫操作

(注:參考的教材使用的是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();就行了

程序運行效果:

 

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