относительно проверки существования файла в цикле for в C ++ - PullRequest
0 голосов
/ 25 апреля 2011

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

Основы его написания:

count=argc;


for(i=0; i < count-1; i++)
{
    filename[i] = argv[i+1];
}


for( i=0; i < count-1; i++)
      {
      int tempi=i;
      ifstream infile(filename[i].c_str());

           if(infile)
           {
           //do things
           }
           else
           {
           cout<<"no file"<<endl;
           }

Ответы [ 3 ]

0 голосов
/ 25 апреля 2011

Канонический способ доступа к argv:

int main( int argc, char * argv[] ) {
    for ( int i = 1; i < argc; i++ ) {
        // do something with argv[i]
    }
}
0 голосов
/ 25 апреля 2011

infile в условном выражении оценивается как false, когда поток находится в "плохом" состоянии.

Однако, просто не открыв файл, вы не оставите поток в плохом состоянии (добро пожаловать в C ++!). Только после попытки чтения из потока этот механизм сработает для вас.

К счастью, вы можете использовать infile.is_open(), чтобы явно проверить, был ли открыт поток или нет.

Редактировать

Выше не соответствует действительности .

Достаточно проверить состояние потока , и я не вижу ничего плохого в вашем коде.

0 голосов
/ 25 апреля 2011

Вам нужно позвонить infile.is_open(). Кроме того, планируете ли вы что-то сделать с файлом, если он существует, или нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...