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