Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;ios:fail()标志_C++_Ifstream - Fatal编程技术网

C++ C++;ios:fail()标志

C++ C++;ios:fail()标志,c++,ifstream,C++,Ifstream,我试图读取大于2GBs(约15GBs)的las文件,但ios::fail()标志在第345字节变为真。下面是代码 void Foo() { char* filename = "../../../../../CAD/emi/LAS_Data/AOI.las"; ifstream m_file (filename); char c; int count = 0; if (m_file.is_open()) { while ( m_file.good() )

我试图读取大于2GBs(约15GBs)的las文件,但ios::fail()标志在第345字节变为真。下面是代码

void Foo()
{
  char* filename = "../../../../../CAD/emi/LAS_Data/AOI.las";
  ifstream m_file (filename);

  char c;
  int count = 0;

  if (m_file.is_open())
  {
      while ( m_file.good() )
      {
          m_file.get(c);
          cout << c << endl;
          count++;
      }

      // Check State

      if(m_file.fail())
          cout << "File Error: logical error in i/o operation." << endl;

      if(m_file.eof())
          cout << "Total Bytes Read: " << count << endl;

      m_file.close();
  }
  else
  {
      cout << "File Error: Couldn't open file: " << endl;
  }
}

我遗漏了什么?

我猜你在使用Windows。Windows有一个怪癖,即控件Z标记文本文件的结尾,而不管文件实际有多大。解决方案是以二进制模式打开文件

ifstream m_file (filename, std::ios::binary);

我猜你在用Windows。Windows有一个怪癖,即控件Z标记文本文件的结尾,而不管文件实际有多大。解决方案是以二进制模式打开文件

ifstream m_file (filename, std::ios::binary);

而(m_file.good())
是错误的。哪个资源让你这么做?对于15GB的文件,我最好使用内存映射文件。我尝试了“while(!m_file.eof())”,但没有任何改变。是关于文件的大小吗?但是现在看到错误(第345字节)还为时过早吗?我将尽快搜索内存映射文件。那里的教程在很多方面都很糟糕。循环出错的原因在于,只有在操作失败后才能获得失败位。因此,您必须先阅读一个字符,然后在使用您阅读的内容(或者可能无法阅读的内容)之前检查是否成功。顺便说一句:使用
char-const*filename=…
。使用
get
读取15GB的文件确实不是一个好主意。它将非常慢。
而(m_file.good())
是错误的。哪个资源让你这么做?对于15GB的文件,我最好使用内存映射文件。我尝试了“while(!m_file.eof())”,但没有任何改变。是关于文件的大小吗?但是现在看到错误(第345字节)还为时过早吗?我将尽快搜索内存映射文件。那里的教程在很多方面都很糟糕。循环出错的原因在于,只有在操作失败后才能获得失败位。因此,您必须先阅读一个字符,然后在使用您阅读的内容(或者可能无法阅读的内容)之前检查是否成功。顺便说一句:使用
char-const*filename=…
。使用
get
读取15GB的文件确实不是一个好主意。这将是非常缓慢的。