DWORD WINAPI myThreadProc(
LPVOID lpParameter   // thread data
)
{ CMyDlg *pMyDlg=(CMyDlg *)lpParameter;
FILE *pWrite=fopen(pMyDlg->m_filename,"wb");
fseek(pWrite,0,SEEK_SET);
if(pWrite==NULL)
return 0; DWORD cout=pMyDlg->m_filesize/100;
DWORD mod=pMyDlg->m_filesize%100;
//pMyDlg->m_process.SetRange(0,(short)cout+1);   //当文件较大时精度严重丢失,可能变成负数
pMyDlg->m_process.SetRange(0,100);
DWORD ByteWritten=0;
int flag=0;//文件是否大于100字节的标记
CString strShow;
for (DWORD j=1;j<=100;j++)
{
for (DWORD k=1;k<=cout;k++)
{
flag=1;
fputc(0,pWrite);
ByteWritten++;
}
pMyDlg->m_process.SetPos(j);
strShow.Format("处理进度:%d%s",j,"%");
pMyDlg->SetDlgItemText(IDC_STATICPROCESS,strShow);
} int dblSize;
int per;
if (flag==0)
{
pMyDlg->m_process.SetRange(0,(short)pMyDlg->m_filesize);
dblSize=pMyDlg->m_filesize;
}

for (DWORD y=1;y<=mod;y++)
{
fputc(0,pWrite);
ByteWritten++;
if (flag==0)
{
per=y/dblSize*100;
pMyDlg->m_process.SetPos(y);
strShow.Format("处理进度:%d%s",per,"%");
pMyDlg->SetDlgItemText(IDC_STATICPROCESS,strShow);
}
}
fclose(pWrite);
if ((ByteWritten==pMyDlg->m_filesize) /*&& (DeleteFile(pMyDlg->m_filename))*/)
{
pMyDlg->m_bPlaySound=FALSE;
DeleteFile(pMyDlg->m_filename);
MessageBox(pMyDlg->m_hWnd,"文件粉碎成功~    ","提示",MB_ICONASTERISK); }
EnableWindow(pMyDlg->m_hStart,TRUE);
return 1;
}
谁能说说这段文件粉碎程序每句的大概意思,急急急!!!

解决方案 »

  1.   

        就是往文件里写数据0,而且是写一遍就完事了.只不过写的方式有些复杂,可能是故意迷惑的,实际上就是按顺序往文件里写0,写完后就删除这个文件,这样你恢复的文件的内容都是0,你可以试试是不是这样.
        实际上就这种算法,可能打开文件,按顺序写就行了,没必须这么做.这个程序的执行过程是这样:
    1.按100个字节做为基数,根据文件字节数先算除以100的整数是多少,比如文件大小是510个字节,那么:510/100=5;也就是cout=5;
    2.再算余数是多少,就是去掉100的整数后还剩下多少字节:510%100=10;也就是mod=10;
    3.先写整数个字节的数据:
    for (DWORD j=1;j<=100;j++)
    {
    for (DWORD k=1;k<=cout;k++)//此处count=5;
    {
    flag=1;
    fputc(0,pWrite);//写数据0
    ByteWritten++;
    }
    pMyDlg->m_process.SetPos(j);
    strShow.Format("处理进度:%d%s",j,"%");
    pMyDlg->SetDlgItemText(IDC_STATICPROCESS,strShow);
    }
    这就是写500个字节0,
    4.这时还剩下10个数据,再写剩下的数据:
    for (DWORD y=1;y<=mod;y++)//mod=10;
    {
    fputc(0,pWrite);
    ByteWritten++;
    if (flag==0)

    per=y/dblSize*100;
    pMyDlg->m_process.SetPos(y);
    strShow.Format("处理进度:%d%s",per,"%");
    pMyDlg->SetDlgItemText(IDC_STATICPROCESS,strShow);
    }
    }
    5.判断是否写成功:
    if ((ByteWritten==pMyDlg->m_filesize) /*&& (DeleteFile(pMyDlg->m_filename))*/)
    {
    pMyDlg->m_bPlaySound=FALSE;
    DeleteFile(pMyDlg->m_filename);
    MessageBox(pMyDlg->m_hWnd,"文件粉碎成功~ ","提示",MB_ICONASTERISK);
    }
    ByteWritten是实际上写入的数据字节数,当它等于文件的字节数时,就说明写入成功