C ++:在char *中将大型二进制文件(2GB到4GB)保存到RAM中?

时间:2015-12-24 11:01:53

标签: c++ file-io tcp ftp

我正在使用C ++中的文件传输程序将文件转换为二进制文件,将字节保存在char *中,然后通过 TCP 发送该字符*连接到另一台计算机。然后另一台计算机在本地重新创建该文件。该程序确实有效,但我遇到了大文件的大问题!我无法分配足够的数组索引来包含字节!例如,如果我想发送一个600MB的文件,我需要一个带有600万个索引的char *。这有效。但是一旦我走得更高,程序根本无法分配内存而我会收到错误。

我的一位朋友建议我将文件分成块并按块执行传输块,但这会产生大量其他挑战,并且需要我基本上重写整个程序。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:6)

  

我的一位朋友建议我将文件分成块并按块执行传输块,但这会产生大量其他挑战,并且需要我基本上重写整个程序。

这就是为什么它被称为计算机科学,以及为什么一旦你掌握了这些挑战,你就可以前往这座城市并赚取大笔资金。

答案 1 :(得分:1)

我不知道转换为二进制的意思,但你不应该分配600MB +的内存,而是使用缓冲。

例如,要从磁盘发送文件:

  • 打开文件
  • 读取缓冲区中的部分文件
  • 通过TCP连接发送缓冲区(重复完成)

您也可以使用内存映射(或Windows中的TransmitFile())。

如果您的数据需要转换:

  • 打开文件
  • 读取缓冲区中的部分
  • 转换缓冲区
  • 发送缓冲区(重复)