私はC++を使い始めたばかりで、コードにエラーチェックを追加したいと考えています。また、適切なコーディング方法を使用していることを確認したいと考えています。 ASCIIファイルから行を文字列に読み取ります。
ifstream paramFile;
string tmp;
//open input file
tmp.clear();
paramFile >> tmp;
//parse tmp
入力ファイルの読み取りが成功したことを確認するためにエラーチェックを行うにはどうすればよいですか?
そこにあるASCIIファイルから読み取る方法の方がはるかに複雑です。これを「安全/堅牢」に行う方法はありますか?
_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
_はどちらもストリームへの参照を返します。ストリームはブール値に評価され、読み取り操作後に確認できます。上記の例は、読み取りが成功した場合にのみtrueと評価されます。
これが私があなたのコードを作る方法の例です:
_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
}
_