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

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

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

最佳答案

您需要知道担心的错误,尤其是要处理+继续发生的错误,以及遇到错误要终止的错误。

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

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库在不抛出异常的情况下进行了大部分错误处理。

10-07 13:02