gpt4 book ai didi

c++ - gzstream 在 Windows 上通过 mingw : injects CR + LF

转载 作者:行者123 更新时间:2023-11-30 03:05:49 24 4
gpt4 key购买 nike

我从the site 下载了源代码并构建了它,但是当我运行测试时,所有压缩文件都有 CR+LF 行结尾,而不仅仅是 LF,这使得解压缩的文件与原始文件不同。

我正在查看源代码,但似乎他们已经在以二进制模式打开文件:

gzstreambuf* gzstreambuf::open( const char* name, int open_mode) {
if ( is_open())
return (gzstreambuf*)0;
mode = open_mode;
// no append nor read/write mode
if ((mode & std::ios::ate) || (mode & std::ios::app)
|| ((mode & std::ios::in) && (mode & std::ios::out)))
return (gzstreambuf*)0;
char fmode[10];
char* fmodeptr = fmode;
if ( mode & std::ios::in)
*fmodeptr++ = 'r';
else if ( mode & std::ios::out)
*fmodeptr++ = 'w';
*fmodeptr++ = 'b';
*fmodeptr = '\0';
file = gzopen( name, fmode);
if (file == 0)
return (gzstreambuf*)0;
opened = 1;
return this;
}

我真的很想使用这段代码,因为它看起来非常干净,并且可以在 mingw gcc 上毫不费力地编译。唯一的问题是这个棘手的事情,如果我能找到解决方案,我可以放过它。

最佳答案

我已经成功实现了我的解决方法。尽管 gzstream 看起来不错,但我还是硬着头皮写了一些直接使用 zlib 的代码。事实证明它还不错一点儿,因为 zlib 有隐藏的助手,而且 zlib.h 本身也有很多有用的注释。

ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); 非常简单。

当然,伪造的 0x0D 回车字符不再有问题!

关于c++ - gzstream 在 Windows 上通过 mingw : injects CR + LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com