C ++读取文件末尾的剩余数据
我正在使用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字节? 我知道,我应该知道这一点,但无论如何我必须要问这个问题。
字节是用来测量文件大小的离散单位,还是一个文件的大小可以是11.25字节?
没有数据类型可以少于一个字节,并且您的文件被表示为char
数组,意味着每个字符都是一个字节。 因此,不可能以字节为单位获得整数数字。
根据你的帖子,这里是第一步,第二步和第三步:
while (fin >> m)
{
// ...
}
std::ostringstream buffer;
buffer << fin.rdbuf();
std::string contents = buffer.str();
// fill with 0s
std::fill(contents.begin(), contents.end(), '0');
链接地址: http://www.djcxy.com/p/54083.html
上一篇: C++ reading leftover data at the end of a file
下一篇: JNI converting native unsigned char arry to jbyte array