【问题标题】:How to read large files in C++ with mixed text and binary如何使用混合文本和二进制文件在 C++ 中读取大文件
【发布时间】:2014-04-27 22:46:49
【问题描述】:

我需要读取文本、二进制或组合的大文件(例如 JPEG 文件),对其进行加密,然后将其写入文件。稍后,我将需要读取加密数据并对其进行解密。 最终目标是验证解密数据是否与原始数据匹配。 我的问题是,对于大于 1Meg 的大文件,我不想逐个字符地读写。我将此代码用于电话,I/O 会导致用户延迟过长。 使用纯文本文件,使用 fread() 和 fwrite() 将数据转换为二进制,结果与原来的不同。对于 jpeg 图像,似乎有一些文本内容与二进制数据混合在一起。 有没有办法有效地读取任意类型的文件并以原始格式写回? 还是逐个字符是唯一的选择? 还是我还是不走运?

【问题讨论】:

  • 为什么文件的内容很重要?只需使用适用于原始字节块的算法(“二进制模式”)。
  • 将其分解为更小的任务。发布您尝试过的内容。
  • "对于纯文本文件,使用 fread() 和 fwrite() 将数据转换为二进制,我无法将最终结果与原始结果进行比较。" 我不不跟随。为什么不能将最终结果与原始结果进行比较?例如,您可以使用memcmpstd::vector<unsigned char>::operator=,或您喜欢的任何其他比较机制。
  • C++ 允许缓冲文件读取,因此您不会因读取字节而牺牲太多速度。只需确保在打开文件进行阅读时缓冲文件即可。
  • @ChrisLaplante 你是对的。事实证明,明文和密文的缓冲区在解密函数中被交换了。二进制工作得很好。谢谢大家!

标签: c++ encryption text-files binaryfiles large-files


【解决方案1】:

调试后发现,解密函数的明文和密文缓冲区向后分配。交换缓冲区分配后,解密结果与原始数据匹配。我原本以为可能将文本读取为二进制然后重写为二进制不会显示为文本,但我错了。 将整个文件作为二进制文件读取就可以了。

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 2016-01-20
    • 2011-01-26
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多