C++使用ifstream读取文件内容的示例详解

  #include

  #include

  #include

  using namespace std;

  //读取整个文件内容到char array数组中去

  void fileReadAllToCharArray()

  {

  std::ifstream file;

  //以只读方式打开文件

  file.open("myfile.txt", std::ios::in);

  //指针定位到文件末尾

  file.seekg(0, std::ios::end);

  int fileLength = file.tellg();

  //指定定位到文件开始

  file.seekg(0, std::ios::beg);

  cout << "fileLength:" << fileLength << endl;

  char* buffer = new char[fileLength + 1];

  file.read(buffer, fileLength);

  buffer[fileLength] = '0';

  string contents = buffer;

  cout << "contents:" << contents << endl;

  if (buffer) {

  delete[] buffer;

  }

  file.close();

  }

  //读取方式:逐行读取Line by Line, 将行读入字符数组, 行之间用回车换行区分

  void fileReadToCharArray()

  {

  std::ifstream file("myfile.txt");

  constexpr int LINE_LENGTH = 100;

  char str[LINE_LENGTH];

  int lineNum = 0;

  while (file.getline(str, LINE_LENGTH))

  {

  cout << "Read from line[" << ++lineNum << "] :"<

  }

  cout << "file has line:" << lineNum << endl;

  }

  //读取方式:逐行读取Line by Line, 将行读入string, 行之间用回车换行区分

  void fileReadToString()

  {

  std::ifstream file("myfile.txt");

  int lineNum = 0;

  string str;

  while (getline(file, str)) {

  cout << "Read Data on Line:[" << ++lineNum<<"] :" << str <

  }

  cout << "file has line:" << lineNum << endl;

  }

  //读取方式:逐词读取Word by Word,词之间用空格划分

  void fileReadWbW()

  {

  std::ifstream file("myfile.txt");

  string s;

  while (file >> s)

  {

  cout << "Read From File[" << s <<"]"<

  }

  }

  //带检测文件名功能

  void fileReadWithErrCheck()

  {

  string fileName = "file .dat";

  std::ifstream fin(fileName.c_str());

  if (!fin) {

  cout << "Error Opening file:[" << fileName << "]" << " for input " << endl;

  exit(-1);

  }

  }

  int main()

  {

  #if 0

  char data[100];

  ofstream outfile;

  outfile.open("myfile.txt", ios::out | ios::trunc);

  cout << "enter your name: ";

  //cin.getline(data, 100);

  outfile << "hello world"<

  ifstream infile;

  infile.open("myfile.txt", ios::in);

  cout << "read file from myfile.txta" << endl;

  string readData;

  infile >> readData;

  std::cout << "data:" << readData << endl;

  outfile.close();

  #endif

  //读取整个文件内容到char array数组中去

  fileReadAllToCharArray();

  std::cout << "-----------------" << endl;

  //逐行读取Line by Line

  fileReadToCharArray();

  std::cout << "-----------------" << endl;

  //文件逐词读取Word by Word

  fileReadWbW();

  std::cout << "-----------------" << endl;

  //逐行读取Line by Line, 将行读入string分

  fileReadToString();

  //带检测文件名功能

  fileReadWithErrCheck();

  std::cout << "-----------------" << endl;

  }