[读取MAC地址时读取文件异常

问题描述 投票:-1回答:1

我们有一个通用的文件操作类,它将执行所有基本文件操作。因此,我使用相同的文件操作类从Linux机器读取MAC地址,并且它抛出basic_ios :: clear:iostream异常。

这里是执行文件操作的代码

bool FileIO::ReadTextFile(const std::string & FileName, std::string & Contents)
{
    bool Result = false;
    std::ifstream FileObj;

    try
    {
        FileObj.exceptions(std::ifstream::badbit | std::ifstream::failbit);
        if(DoesFileExist(FileName))
        {
            FileObj.open(FileName, std::ifstream::in);

            FileObj.seekg(0, std::ios::end);
            Contents.resize(FileObj.tellg());
            FileObj.seekg(0, std::ios::beg);

            FileObj.read(&Contents[0], Contents.size());
            FileObj.close();

            Result = true;
        }
    }
    catch (std::exception & e)
    {
        std::cout << "Error when reading from file : " << FileName << " "<< std::strerror(errno) << " Exception : " << e.what() << std::endl;
    }

    return Result;
}

我正在像下面这样调用此函数,

std::string MACAddress;
pFOpHandler->ReadEntireTextFile("/sys/class/net/eth0/address", MACAddress);

它已成功读取MAC地址,但是文件操作引发异常,并且MACAddress字符串包含MAC地址和一些垃圾值。

c++ linux fstream ifstream
1个回答
2
投票

您可能想尝试一下。您必须为fstream和sstream添加包含文件。

bool FileIO::ReadTextFile(const std::string &FileName, std::string &Contents) {
  bool Result = false;
  std::ifstream FileObj;

  try {
    FileObj.exceptions(std::ifstream::badbit | std::ifstream::failbit);
    if (DoesFileExist(FileName)) {
      FileObj.open(FileName, std::ifstream::in);
      std::stringstream FileContents;
      FileContents << FileObj.rdbuf();
      Contents = FileContents.str();

      Result = true;
    }
  } catch (std::exception &e) {
    std::cout << "Error when reading from file : " << FileName << " "
              << std::strerror(errno) << " Exception : " << e.what()
              << std::endl;
  }
© www.soinside.com 2019 - 2024. All rights reserved.