我是C ++的新手,想要为我的代码添加错误检查,我想确保我使用良好的编码实践。我使用以下命令将ASCII文件中的一行读入字符串:
ifstream paramFile;
string tmp;
//open input file
tmp.clear();
paramFile >> tmp;
//parse tmp
如何进行错误检查以确保输入文件读取成功?
我看到从那里的ASCII文件中读取更复杂的方法。我这样做的方式是“安全/健壮”吗?
答案 0 :(得分:13)
paramFile >> tmp;
如果该行包含空格,则不会读取整行。如果您希望使用std::getline(paramFile, tmp);
,直到换行符为止。通过检查返回值来完成基本错误检查。例如:
if(paramFile>>tmp) // or if(std::getline(paramFile, tmp))
{
std::cout << "Successful!";
}
else
{
std::cout << "fail";
}
operator>>
和std::getline
都返回对流的引用。流评估为布尔值,您可以在读取操作后检查该值。如果读取成功,上面的示例将仅评估为真。
以下是我如何制作代码的示例:
ifstream paramFile("somefile.txt"); // Use the constructor rather than `open`
if (paramFile) // Verify that the file was open successfully
{
string tmp; // Construct a string to hold the line
while(std::getline(paramFile, tmp)) // Read file line by line
{
// Read was successful so do something with the line
}
}
else
{
cerr << "File could not be opened!\n"; // Report error
cerr << "Error code: " << strerror(errno); // Get some info as to why
}