#include <iostream>
#include <string>
class OpenFileException {
public:
explicit OpenFileException(const std::string& name, int code):
m_name(name),
m_code(code)
{
}
std::string name() const
{
return m_name;
}
int code() const
{
return m_code;
}
private:
std::string m_name;
int m_code;
};
void openfile(const std::string& name)
{
if (name == "fail") {
throw OpenFileException(name, 10);
}
}
void handlefiles()
{
openfile("/home/Knjagskij/file1.txt");
openfile("/etc/passwd");
openfile("fail"); // Oooops...
openfile("/etc/hosts");
}
int main() {
try {
handlefiles();
} catch (const OpenFileException& ex) {
std::cout << "Unable to open file: " << ex.name() << " because of " << ex.code() << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3MgT3BlbkZpbGVFeGNlcHRpb24gewpwdWJsaWM6CglleHBsaWNpdCBPcGVuRmlsZUV4Y2VwdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IGNvZGUpOgoJbV9uYW1lKG5hbWUpLAoJbV9jb2RlKGNvZGUpCgl7Cgl9CgoJc3RkOjpzdHJpbmcgbmFtZSgpIGNvbnN0Cgl7CgkJcmV0dXJuIG1fbmFtZTsKCX0KCQoJaW50IGNvZGUoKSBjb25zdAoJewoJCXJldHVybiBtX2NvZGU7Cgl9CgkKcHJpdmF0ZToKCXN0ZDo6c3RyaW5nIG1fbmFtZTsKCWludCBtX2NvZGU7Cn07Cgp2b2lkIG9wZW5maWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQp7CglpZiAobmFtZSA9PSAiZmFpbCIpIHsKCQl0aHJvdyBPcGVuRmlsZUV4Y2VwdGlvbihuYW1lLCAxMCk7Cgl9Cn0KCnZvaWQgaGFuZGxlZmlsZXMoKQp7CglvcGVuZmlsZSgiL2hvbWUvS25qYWdza2lqL2ZpbGUxLnR4dCIpOwoJb3BlbmZpbGUoIi9ldGMvcGFzc3dkIik7CglvcGVuZmlsZSgiZmFpbCIpOyAvLyBPb29vcHMuLi4KCW9wZW5maWxlKCIvZXRjL2hvc3RzIik7Cn0KCmludCBtYWluKCkgewoJdHJ5IHsKCQloYW5kbGVmaWxlcygpOwoJfSBjYXRjaCAoY29uc3QgT3BlbkZpbGVFeGNlcHRpb24mIGV4KSB7CgkJc3RkOjpjb3V0IDw8ICJVbmFibGUgdG8gb3BlbiBmaWxlOiAiIDw8IGV4Lm5hbWUoKSA8PCAiIGJlY2F1c2Ugb2YgIiA8PCBleC5jb2RlKCkgPDwgc3RkOjplbmRsOwoJfQoJCglyZXR1cm4gMDsKfQ==