|
| 作 者 | 主题:带动点人气吧,文件删除小工具 |
winewind![]() =七步之才= 职务:版主 积分:2611 贴数:1767 |
理想的文件粉碎应该是不可恢复的。标准的做法应该是去系统文件表查询文件的每块具体位置,然后在这些位置上写入垃圾数据。不过太麻烦了,现在市面上有的粉碎机就是删除以后随便写东西到磁盘去,不管具体位置,写到原来文件的位置最好,就不可恢复了。这种方法可能要写大量的数据才能保证覆盖原有文件的大部分扇区。可能会比较耗时。所以我找了下面这个折衷的办法:删除前改写文件内容,最多恢复的也是改写后的内容。或许有人会说,那我还不如自己动手,先改内容,再保存,再删除。是啊,对小的文件,我的这个程序还真没什么用场。。。。 # 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 |
嗯,8错咯,顶下先~~~ |
|
笨笨鼠 =化零为整= 积分:3 贴数:3 |
好长啊! |
| 返回《编程与软件开发精华》 快速返回 | |
|
| |
|
|
如果您想发帖,请先注册或登录!
| Copyright © 2006 Patching.net All rights reserved. |