补天网 - 编程与软件开发精华   
分页显示
返回《编程与软件开发精华》 快速返回
作 者  主题:带动点人气吧,文件删除小工具
winewind


=七步之才=
职务:版主
积分:2611
贴数:1767
 日期:2004-10-20 0:44:46
理想的文件粉碎应该是不可恢复的。标准的做法应该是去系统文件表查询文件的每块具体位置,然后在这些位置上写入垃圾数据。不过太麻烦了,现在市面上有的粉碎机就是删除以后随便写东西到磁盘去,不管具体位置,写到原来文件的位置最好,就不可恢复了。这种方法可能要写大量的数据才能保证覆盖原有文件的大部分扇区。可能会比较耗时。所以我找了下面这个折衷的办法:删除前改写文件内容,最多恢复的也是改写后的内容。或许有人会说,那我还不如自己动手,先改内容,再保存,再删除。是啊,对小的文件,我的这个程序还真没什么用场。。。。
 
 # include "windows.h"
 # include "stdio.h"
 
 #pragma comment(lib, "kernel32.lib")
 
 
 // Global Variables Declaration
 char *pFileName = NULL;
 HANDLE hFileDel;
 
 // ERROR Handle Function
 void ErrorExit(LPTSTR lpszFunction)
 {
  TCHAR szBuf[80];
  LPVOID lpMsgBuf;
  DWORD dw = GetLastError();
 
  FormatMessage(
  FORMAT_MESSAGE_ALLOCATE_BUFFER |
  FORMAT_MESSAGE_FROM_SYSTEM,
  NULL,
  dw,
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  (LPTSTR) &lpMsgBuf,
  0, NULL );
 
  wsprintf(szBuf,
  "%s failed with error %d: %s",
  lpszFunction, dw, lpMsgBuf);
 
  MessageBox(NULL, szBuf, "Error", MB_OK);
 
  LocalFree(lpMsgBuf);
  ExitProcess(dw);
 }
 
 // Main Function
 int main(int argc, char *argv[])
 {
  if(argc != 2)
  {
  printf("Command Format: %s filename\n", argv[0]);
  return -1;
  }
 
  pFileName = argv[1]; // the file to be deleted
 
  // TODO: Open the Target File
  hFileDel = CreateFile( pFileName,
  GENERIC_READ | GENERIC_WRITE,
  0,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL);
  if(hFileDel == INVALID_HANDLE_VALUE) // file can not be opened
  {
  ErrorExit("CreatFile");
  return -1;
  }
 
 
 
  LPSTR RubbishBuffer;
  DWORD dwBytesWritten;
  DWORD dwBufferLength;
 
  // TODO: Get File Size
  dwBufferLength = GetFileSize(hFileDel, NULL);
 
 
  // TODO: Construct the Rubbish Buffer
  int BufferSize = (int) dwBufferLength;
  int i; // loop counter
  char RubbishData[BufferSize], *p;
  p = RubbishData;
  for(i=0; i<BufferSize; i++)
  {
  *p = ‘i‘;
  p++;
  }
  //printf("the rubbish buffer is: %s\n", RubbishData);
 
 
  // TODO: Overwrite the Original File with Rubbish Data
  if(!WriteFile( hFileDel,
  RubbishData,
  dwBufferLength,
  &dwBytesWritten,
  NULL) )
  {
  ErrorExit("WriteFile Function");
  return -1;
  }
 
 
  CloseHandle(hFileDel);
 
 
  // TODO: Delete the Modified File
  if(!DeleteFile(pFileName))
  {
  ErrorExit("DeleteFile");
  return -1;
  }
 
  return 1;
 }
 
 我在A盘上的FAT格式测试过了,最多只能恢复到改写后的内容。NTFS谁有空帮忙测一下。我的硬盘太大,扫一次n多的垃圾出来。。。最好谁有ntfs的小分区,测起来就方便了。我用的恢复软件是soft.jetdown.com上的R-Studio,确实不错:)
 
 
 
x-bit


=入木三分=
职务:版主
积分:37
贴数:450
日期: 2004-10-20 21:17:50  
嗯,8错咯,顶下先~~~
笨笨鼠
=化零为整=
积分:3
贴数:3
日期: 2004-11-1 16:32:36  
好长啊!
返回《编程与软件开发精华》 快速返回

IE不断爆出漏洞,使用FireFox浏览器,会更安全一些:

如果您想发帖,请先注册或登录!


Copyright © 2006 Patching.net All rights reserved.