文件操作(2):文件粉碎机

文件粉碎机原理:文件被删除之前,用随机字符对其进行写操作

(注:参考的教材使用的是BCB编译器,BCB不会,所以这里改成使用MFC)

一、

首先建立一个基于对话框的MFC工程,在对话框添加如图所示控件

二、

接下来添加 statusbar(状态栏)控件,使用 CStatusBarCtrl类,具体操作是在主对话框文件中添加,一个类型为CStatusBarCtrl的成员变量 m_StatusBar

CStatusBarCtrl m_StatusBar;

在初始化函数中对其进行初始化:

   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();就行了

程序运行效果:

 

posted @ 2015-12-31 14:18  廖凡  阅读(1009)  评论(0编辑  收藏  举报