Использование повышение:: файловая система :
#include <boost/filesystem.hpp>
if ( !boost::filesystem::exists( "myfile.txt" ) )
{
std::cout << "Can't find my file!" << std::endl;
}
Остерегайтесь условий состязания: если файл исчезает между, "существует" проверка и время, Вы открываете его, Ваша программа неожиданно перестанет работать.
лучше пойти и открыть файл, проверить на отказ и если все хорошо, тогда делают что-то с файлом. Это еще более важно с критическим по отношению к безопасности кодом.
Детали о безопасности и условиях состязания: http://www.ibm.com/developerworks/library/l-sprace.html
Я - счастливый пользователь повышения и конечно использовал бы решение Andreas. Но если у Вас не было доступа к повышению, освобождает Вас, может пользоваться потоковой библиотекой:
ifstream file(argv[1]);
if (!file)
{
// Can't open file
}
Это не совсем столь же хорошо как повышение:: файловая система:: существует, так как файл будет на самом деле открыт..., но тогда это обычно - следующая вещь, которую Вы хотите сделать так или иначе.
Используйте статистику (), если это является достаточно межплатформенным для Ваших потребностей. Это не стандарт C++ хотя, но POSIX.
На MS Windows существует _stat, _stat64, _stati64, _wstat, _wstat64, _wstati64.
Как насчет access
?
#include <io.h>
if (_access(filename, 0) == -1)
{
// File does not exist
}
Я пересмотрел бы попытку узнать, существует ли файл. Вместо этого необходимо попытаться открыть его (в Стандарте C или C++) в том же режиме, Вы намереваетесь использовать его. Какое использование знает, что файл существует, если, скажем, это не перезаписываемо, когда необходимо использовать его?