2013-10-23 212 views
0

如何以字节形式读取文件,而不是使用矢量。从文件中逐字节读取

通过使用这个,我可以读取整个文件成一个字节的矢量。

std::basic_ifstream<BYTE> file(driveName, std::ios::binary); 
vector<BYTE> x = std::vector<BYTE>(
    (std::istreambuf_iterator<BYTE>(file)), 
    std::istreambuf_iterator<BYTE>()); 

不过,我想先读512个字节,那么“X”个字节,“X1”字节等, 容量调整选项犯规在这里工作。

我看到这个链接,reading the binary file into the vector of unsigned chars,这造成了更多的困惑。

任何帮助,将不胜感激。

+0

也许这可以给一个想法:http://stackoverflow.com/questions/5513532/reading-binary-istream-byte-by-byte/8574393 – codeling

+0

已经访问的帖子.. couldnt从它收集很多 –

回答

1

您可以使用较低级别的接口:

std::ifstream ifs(filename, std::ios::binary); 
char buf1[512]; 
ifs.read(buf1, sizeof(buf1)/sizeof(*buf1)); 
char buf2[x]; 
ifs.read(buf2, sizeof(buf2)/sizeof(*buf2)); 
char buf3[x1]; 
ifs.read(buf3, sizeof(buf3)/sizeof(*buf3)); 

只是检查EOF和错误。

+1

我想由BYTE读取BYTE。这是逐字符读取的。在sizeof(char)大于1 Byte的编译器中,它会起作用吗? –

+0

size(char)永远是1.唯一不能保证的是char有8位似乎 - > http://stackoverflow.com/questions/4266771/char-size-confusion。然而,在大多数情况下,1字节应该有8位 – codeling

+0

感谢Andy和nyarlathotep .... –