¿Cómo leer un archivo de entrada (archivo de texto) y validar la entrada como un entero válido?

Estoy escribiendo un programa que necesita leer un archivo de texto y buscar en la primera línea del archivo de texto un número entre 0 y 10. He encontrado un par de soluciones, pero todavía hay un problema:

Como leí el archivo:

const string FileName= argv[1];
ifstream fin(argv[1]);
if(!fin.good()){
    cout<<"File does not exist ->> No File for reading";
    exit(1);
}
getline(fin,tmp);
if(fin.eof()){
    cout<<"file is empty"<<endl;
}
stringstream ss(tmp);

Primero utilicé atoi:

const int filenum = atoi(tmp.c_str());
    if(filenum<1 || filenum>10){
        cout<<"number of files is incorrect"<<endl;
        //exit(1);
    }

Si la primera línea es un carácter, cámbiela a cero. Pero quiero llamar a una excepción y terminar el programa.

Entonces utilicéisdigit pero mi entrada es una cadena y no funciona con la cadena. Finalmente utilicé cada carácter en cadena pero todavía no funciona.

   stringstream ss(tmp);
   int i;
   ss>>i;
   if(isdigit(tmp[0])||isdigit(tmp[1])||tmp.length()<3)
   {}

Respuestas a la pregunta(2)

Su respuesta a la pregunta