istream::tellg() returns -1 if ifstream is in the failed state. fail may be set in seekg() or, much more probably, in the constructor -- check for the ifile state after the construction to see whether it is actually opened. You could get access denied, bugs in the name passing or something else.
One possible source of error: isn't _path.file_string()
returns only file name without absolute path? If so, ifile constructor could give you "file not found".
Otherwise, the combination of ifile.seekg(0,std::ios_base::end);
and ifile.tellg();
should work as intended on any binary file, giving the file size.