WOLF 2018 Ответов: 4

Как проверить, существует ли файл


Я пытаюсь проверить, существует ли файл, прежде чем скопировать его в путь. Я думал, что это будет просто, но метод, который я попробовал, получил “std::ios_base::fail: нестандартный синтаксис; используйте ‘&’ для создания указателя на член”, и это была ошибка, которую я получил. Наверное, я веду себя как идиот, но я только начал изучать C++, так что мне еще нужно немного научиться.

Что я уже пробовал:

Bool FileExists(const char * filename)
{
    Bool data = true;
    ifstream file(filename);
    If(file.fail)
    {
         Return data;
    }
    Else
    {
         Data = true;
         Return data;
    }
}

Извините, если это выглядит плохо, потому что я нахожусь на своем телефоне.

4 Ответов

Рейтинг:
2

RickZeeland

Предполагая, что вы используете Visual Studio, см. ответ здесь: Как проверить, существует ли файл с stat в visual studio c++ 2010? - переполнение стека[^]


WOLF 2018

Только что закончил читать это, но я не понимаю, где я могу вернуть истину или ложь. Мне просто нужен простой метод.

Рейтинг:
2

WOLF 2018

Я нашел здесь решение надеюсь оно сработает Проверка наличия файла или его отсутствия[^]

Это очень простой метод.


Richard MacCutchan

Вы заметили, что ваш код возвращается true в обоих случаях?

CPallini

На самом деле он возвращает true. :-)

Richard MacCutchan

:)

0x01AA

Я думаю, что он не будет компилироваться :-)

Usman Hunjra

отличный улов, сэр .. ;)

Рейтинг:
16

Rick York

Вот что я использую в windows :

// see if a file is accessible and is not a directory

bool CheckFileAccess( PCTSTR filename )
{
    bool state = true;
    DWORD attrib = GetFileAttributes( filename );
    if( attrib == INVALID_FILE_ATTRIBUTES )
    {
        state = false;      // not accessible
    }
    else if( attrib & FILE_ATTRIBUTE_DIRECTORY )
    {
        state = false;      // it is a directory
    }
    return state;
}


Rick York

Учитывая это, это простая экстраполяция для получения функции типа IsDirectory ().

WOLF 2018

Спасибо я попробую это сделать

Рейтинг:
1

CPallini

Современный C++ делает вашу жизнь проще: std::файловая система::существует - cppreference.com[^].


WOLF 2018

К сожалению, это не сработало. Мой компьютер не может найти файловую систему std::, и я включил ее.

CPallini

Требуется компилятор, совместимый с C++17.