Более простым решением было бы прочитать файл построчно и проверить, можно ли преобразовать текущую строку в целое число.
Qt уже предоставляет множество удобных методов. Например, вас заинтересует QByteArray::toInt()
.
Следовательно, решение может быть таким:
bool validate(const QString & file_name)
{
QFile in_f(file_name);
if(!in_f.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
bool is_valid = true;
while(is_valid && !in_f.atEnd())
{
QByteArray line = in_f.readLine();
line.toInt(&is_valid); // is_valid is set to false if the conversion failed
}
return is_valid;
}
Таким образом, нет cra sh. Если каждая строка содержит целое число, она вернет true
, в противном случае, если хотя бы одна строка содержит что-то еще (string, double, ...), она вернет false
.
Как реализовано здесь , если файл пуст, функция вернет true
. Конечно, вы можете добавить проверку для этого случая, если хотите вернуть false
.