gpt4 book ai didi

C++读取文件末尾的剩余数据

转载 作者:行者123 更新时间:2023-11-28 07:15:35 28 4
gpt4 key购买 nike

我正在使用 C++ 以二进制模式从文件中获取输入;我将数据读入无符号整数,处理它们,然后将它们写入另一个文件。问题是有时,在文件的末尾,可能会留下一些数据,这些数据不够大,无法放入一个 int 中;在这种情况下,我想用 0 填充文件的末尾并记录需要填充多少,直到数据大到足以填充一个无符号整数为止。

这是我从文件中读取的方式:

std::ifstream fin;
fin.open('filename.whatever', std::ios::in | std::ios::binary);
if(fin) {
unsigned int m;
while(fin >> m) {
//processing the data and writing to another file here
}
//TODO: read the remaining data and pad it here prior to processing
} else {
//output to error stream and exit with failure condition
}

代码中的 TODO 是我遇到问题的地方。文件输入完成并退出循环后,我需要读入文件末尾的剩余数据,这些数据太小而无法填充 unsigned int。然后我需要用二进制 0 填充该数据的末尾,记录足够的填充量以便将来能够取消填充数据。

这是如何完成的,是否已由 C++ 自动完成?

注意:除了 unsigned int 之外,我无法将数据读入任何内容,因为我正在处理数据,就好像它是用于加密目的的无符号整数。

编辑:有人建议我简单地将剩余的内容读入一个字符数组。我假设这将从文件中读取所有剩余数据是否正确?重要的是要注意,我希望这适用于 C++ 可以打开以二进制模式输入和/或输出的任何文件。感谢您指出我没有包含以二进制模式打开文件的详细信息。

编辑:我的代码操作的文件不是由我编写的任何内容创建的;它们可以是音频、视频或文本。我的目标是让我的代码格式不可知,这样我就不能对文件中的数据量做出任何假设。

编辑:好的,基于建设性的评论,这是我所看到的方法,记录在将要进行操作的评论中:

std::ifstream fin;
fin.open('filename.whatever', std::ios::in | std::ios::binary);
if(fin) {
unsigned int m;
while(fin >> m) {
//processing the data and writing to another file here
}
//1: declare Char array
//2: fill it with what remains in the file
//3: fill the rest of it until it's the same size as an unsigned int
} else {
//output to error stream and exit with failure condition
}

此时的问题是:这真的与格式无关吗?换句话说,用于衡量文件大小的字节是离散单位,还是一个文件的大小可以是 11.25 字节?我应该知道这一点,我知道,但无论如何我都得问。

最佳答案

Are bytes used to measure file size as discrete units, or can a file be, say, 11.25 bytes in size?

任何数据类型都不能小于一个字节,您的文件表示为一个 char 数组,这意味着每个字符都是一个字节。因此,不可能得到一个以字节为单位的整数。

关于C++读取文件末尾的剩余数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277992/

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