如何以编程方式销毁/使文件不可读

本文关键字:文件 编程 方式销 | 更新日期: 2023-09-27 17:58:16

当我用vb编程时,我遇到了一个损坏且无法读取的pdf文件。现在,我只是想知道是否可以通过编程创建一个不可读的文件?

事实上,我有它,当我打开文件时,它说:"打开这份文件时出错。阅读这份文件时出现问题(14)"

现在,我想实现的是如何"销毁"一个文件。任何类型的文件。假设我有一个可以由Adobe Reader打开的工作pdf文件,如何使其对Adobe Reader"不可读",这样当我打开它时,它会显示一些消息框,上面写着"打开文件时出错"或类似的内容。。这里有一个链接

如何以编程方式销毁/使文件不可读

的例子

从技术上讲,除了硬件错误,不存在"不可读"这回事。文件包含字节。它是可读的。然而,PDF阅读器期望这些字节具有特定的格式。如果没有,程序将无法从中生成有效的pdf。

想象一张纸给一个演员读。如果你撕下了的一半,另一页就很难阅读。只是演员会抱怨,他不会只演半个剧本。

您可以覆盖文件中的字节。如果你的文件是一个500字节的文件,可以解释为pdf,你可以把它变成一个有2个字节的文件。那么它就是一个两字节的文件。pdf阅读器会抱怨的。如果你在文本编辑器中打开它,它会显示为"FU"。一个程序是垃圾,另一个程序则是数据。

导致pdf不可读的原因是该文件的格式不是读者期望的格式。对于基本的txt文件来说,没有格式可循,无论有多少字节,屏幕上都会显示什么。你可能会胡言乱语,但它仍然会打开。

要"破坏"文件,您必须破坏文件系统。可能有一些方法可以做到这一点,但你不能用托管代码来做到,你需要调用本机API调用来访问原始文件系统,你需要自己解析文件系统,windows不提供这样的功能。也许可以寻找一个可以读取MRR的开源十六进制编辑器,以帮助确定需要进行哪些调用。(重要提示:如果你尝试这样做,你可能会在实验过程中使计算机无法启动,在开始使用文件系统结构之前备份所有文件)

如果你想为其他人隐藏文件的内容,你可以简单地加密文件。

使用此加密文件:

byte[] keySalt = new byte[] { 0x49, 0x76, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 };  
Encrypt("original.txt",  "encrypted.txt", "myPassword", keySalt);  
public static void Encrypt(string fileIn, string fileOut, string pass, byte[] keySalt)  
{  
   PasswordDeriveBytes pdb = new PasswordDeriveBytes(pass, keySalt);  
   Rijndael alg = Rijndael.Create();  
   alg.Key = pdb.GetBytes(32);  
   alg.IV = pdb.GetBytes(16);  
   using (FileStream fsOut = new FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write))  
   {  
      using (FileStream fsIn = new FileStream(fileIn, FileMode.Open, FileAccess.Read))  
      {  
         using (BinaryReader br = new BinaryReader(fsIn, Encoding.Default))  
         {  
            using (CryptoStream cs = new CryptoStream(fsOut, alg.CreateEncryptor(), CryptoStreamMode.Write))  
            {  
              int len = (int)br.BaseStream.Length;  
              cs.Write(br.ReadBytes(len), 0, len);  
              cs.FlushFinalBlock();  
            }  
         }  
       }  
   }  
}