2013-03-10 4 views
2

Я использую boost 1.52, когда пытаюсь получить файл с сетевого диска, с которого у меня нет прав для чтения. Я получаю исключение, после использования boost::filesystem::exists(fileName)
Есть ли работа вокруг лучше, чем просто делать try, catch на каждом месте?boost :: filesystem :: существует сбой

я переключился обратно на мой старый код на данный момент:

bool FileExists(const char* fileName) 
{ 
    struct stat my_stat; 
    return (stat(fileName, &my_stat) == 0); 
} 

//boost Exists throws exception if there are no permissions for share folder 
bool FileExists(const std::string& fileName) 
{ 
    return FileExists(fileName.c_str()); 
} 
+1

Не можете ли вы просто использовать функции, которые вы используете сейчас, заменив 'stat' на' boost :: filesystem :: exists' вместе с необходимой обработкой исключений? Тогда вам не нужно использовать try-catch в любом месте. Он изолирован в этой функции. –

ответ

3

Используйте overload, который не бросает.

bool exists(const path& p, system::error_code& ec) noexcept; 

Однако вы хотите проверить выходной параметр, так что это может быть больше работы, чем улавливание исключения. Это зависит от того, что вы пытаетесь выполнить.

+0

Я просто пытаюсь получить файл конфигурации. и я хочу проверить, существует ли он до начала его анализа, а также, если у меня есть разрешение на чтение с сетевого диска. – Gilad

+0

Вы осознаете неотъемлемое состояние гонки с этой идеей? Файл может быть удален после того, как существует возврат, но перед его анализом. –

+0

Да, однако это простая система. и пользователи знают об этой проблеме. другая проблема, которую я хочу затронуть здесь, - это разрешения. – Gilad