Проверьте, присутствует ли файл в каком-либо каталоге в c ++ - PullRequest
2 голосов
/ 31 января 2012

Я читаю файл из некоторого каталога, используя Visual C ++. Как я могу проверить, существует ли этот файл или нет. Если я использую:

file.open("file.txt", ios::in);

где файл является членом fstream. Это создает файл, если этого файла нет. Как я могу проверить, присутствует ли этот файл или нет. Спасибо

Ответы [ 5 ]

4 голосов
/ 31 января 2012

Ваш код создает файл no , если этот файл еще не существует (в большинстве систем предполагается, что file является std::ifstream).

Из-за присущего параллельного доступа к файловой системе нет надежного способа проверить, существует ли файл . Лучший способ - просто открыть файл для доступа на чтение и проверить, был ли он успешным:

if (file.good()) …
// or simply
if (file) …
2 голосов
/ 31 января 2012
ifstream my_file("file.txt");
if (my_file.good())
{
  // read away
}
1 голос
/ 31 января 2012

Если вы работаете в Windows, вы можете использовать Windows API, чтобы выполнить эту работу за вас. Вот краткий фрагмент кода для вас ... Вы должны передать полный путь к файлу file.txt, чтобы это удалось. Например, D: \ MyFolder \ file.txt

.
    WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;

hFind = FindFirstFile("D:\MyFolder\file.txt", &FindFileData);
GetLastError();

    if (hFind == INVALID_HANDLE_VALUE)
          // File not found
0 голосов
/ 01 февраля 2012

Ваш код может реализовать следующее:

ifstream file("text.text"); 

if(!file){
//handle error / throw exception here
}
0 голосов
/ 31 января 2012

просто вызов файла таким образом не должен создавать файл, если он отсутствует.Он должен завершиться неудачно, и последующие вызовы file.is_open () вернут false.

...