2011-09-24 58 views
0
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(){ 

int size; 

FILE *fp; 
fp=fopen("prova" , "rb"); 

if(fp == NULL){ 
    printf("%s",strerror(2)); 
    return EXIT_FAILURE; 
} 
/* Controllo lunghezza file */ 
fseek(fp, 0, SEEK_END); 
size=ftell(fp); 
fseek(fp, 0, SEEK_SET); 
/* --- */ 
for(i=1; i<=size; i++){ 
    qualcosa 
} 
fclose(fp); 
return EXIT_SUCCESS; 
} 

我想通过用0x00覆盖它来“安全删除”文件......就像/ dev/zero做的那样! 我该怎么做? 我打开了这个文件,我已经检查过他的长度了......现在呢?覆盖0x00到一个文件C

+5

打开文件并以NUL字节写入其长度不会安全地删除该文件;大多数操作系统并不能保证你正在写的东西会被写入文件最初占用的磁盘扇区。 –

+0

是的,我知道但被覆盖的文件是不可恢复的。像ext3,4 HFS,btrfs,NTFS等文件系统恢复文件的元数据,没有竞争对手... – polslinux

+1

确实文件本身可能完好无损地恢复,但你特别要求“安全”删除,这意味着数据被删除是敏感的。如果数据本身潜藏在无关联的行业中的可能性很高,那么通过提供虚假的安全感,您已经损害了客户的利益。 –

回答

2

首先,你只打开它阅读:

fp=fopen("prova" , "rb"); 

您需要:

fp=fopen("prova" , "w+"); 

之后,您只需要编写零的文件,直到你击中你已经确定使用的长度fputc()fwrite()

它发生在我身上,虽然这确实可能无法解决您的实际问题取决于操作系统。它最终可能会将文件写入磁盘上的其他区域(从而使原始数据不变)