C++ fstream 写2G以上大文件问题,请大牛们帮忙看看
问题:用tellp()取得当前文件指针位置,回到前面某个位置更改写过的内容。当文件超过2G以后,tellp()取得的文件位置为负,即取得文件位置失败。具体见代码运行结果中current pos的值。顺便讨论下大家在读写大文件的时候一般都用什么策略比较快!!
int _tmain(int argc, _TCHAR* argv[]){ std::fstream m_file; m_file.open("test_large_file", std::ios_base::in | std::ios_base::out | std::ios_base::trunc | std::ios_base::binary); const unsigned int size = 1024*1024*2; char *data = new char[size]; for (unsigned int i=0;i<size;++i) { data[i] = 'a'; } data[size] = 0; for (int i=0; i<1030; ++i){ m_file.write(data,size); } std::cout<<"size of pos_type:"<<sizeof(std::ios::pos_type)<<std::endl; std::cout<<"current pos:"<<m_file.tellp()<<std::endl; m_file.flush(); m_file.close(); return 0;}