C ++:读取文件时,错误处理的最佳实践是什么(没有例外)

时间:2016-11-10 21:36:20

标签: c++ error-handling std fstream

考虑以下示例。我打开文件并读取前100个字节。

std::ifstream fileRead;
fileRead.open("file.txt", std::ios::binary);
std::vector<char> buffer(100);
fileRead.read(buffer.data(), 100);

您是否建议在不使用例外的情况下阅读文件时处理所有可能错误的最佳做法?

1 个答案:

答案 0 :(得分:1)

你需要知道你担心哪些错误,特别是你想要处理哪些错误+继续,以及你想要在遇到时终止的错误。

例如,您可能遇到的一个错误:如果文件不存在(或者您没有权限/访问权限,该怎么办)?这项检查非常简单:

std::ifstream fileRead("file.txt", std::ios::binary);
if(!fileRead) {/*File doesn't exist! What do we do?*/};

如果文件没有100个字节怎么办?

std::ifstream fileRead("file.txt", std::ios::binary);
if(!fileRead) {/*File doesn't exist! What do we do?*/}
else {
    std::vector<char> buffer(100);
    fileRead.read(buffer.data(), 100);
    if(!fileRead) {
        std::cout << "Only " << fileRead.gcount() << " bytes could be read.\n";
    }
}

对于您提供的代码,这些是我为错误处理编写的唯一错误。如果存在与此示例相关联的其他代码,则可能需要更广泛地处理错误。

请注意,这些示例都没有使用异常处理:C ++ iostreams库可以完成大部分错误处理而不会抛出异常。