c++从文件开头读取到指定字节

c++ reading from beginning of file to a specified byte

本文关键字:字节 读取 文件 开头 c++      更新时间:2023-10-16

试图写入从文件的第一个字节读取到用户指定的字节的文件。我在逻辑上需要帮助。例如,如果文件只有字母a到z,而我只想读取并显示前10个字母。这是我写的一段:

  char byte;
  inFile.seekg(0L,ios::beg);
  inFile.get(byte);
  cout << byte;
  for(int i = 0; i < num; i++);  //num is an int specified by the user.
  {
      inFile.seekg(1, ios::cur);
      inFile.get(byte);
      cout << byte;
  }

第一个问题- for()行末尾的分号:

    for(int i = 0; i < num; i++);
    {
        ...
    }

编译器实际上看到的是:

    for(int i = 0; i < num; i++) { /* do nothing num times */ }
    {
        // code that will only run once
    }

去掉分号

接下来,如果您只是连续读取字节,则不需要在每个字节之间查找。只要调用get()就会得到序列中的下一个字节。所以删除seekg()调用

最后一个问题-这个函数实际上总共调用num + 1inFile.get()。第一个调用在for循环之前。然后在for循环中,get()被称为num次(即。I = 0,1,2,3…num-1)。您可以通过将for循环计数器更改为(i = 1; i < num; i++)或在for循环之前删除get()调用来修复此问题。在下面的代码中,我选择了第二种方式:

void run(int num, istream &inFile)
{
    char byte;
    for(int i = 0; i < num; i++)
    {
        inFile.get(byte);
        cout << byte;
    }
}