2013-10-16 2 views
0

Если я не знаю, существует ли файл. Если он существует, я буду что-то зависеть от содержимого в этом файле. Файл может быть в формате .txt или .gz, и файл также не может существовать. Ниже мой код:Как проверить, существует ли zip-файл или сжатый файл?

 //Check whether is a zip file 
     char *pre_pcom_file_copy = new char[strlen(pre_pat_file)+7]; 
     strcpy (pre_pcom_file_copy,pre_pcom_file); 
     strcat (pre_pcom_file_copy,".gz"); 
     char *cmd = new char[strlen("gzip -dc ")+strlen(pre_pcom_file_copy)+1]; 
     strcpy (cmd,"gzip -dc "); 
     strcat (cmd,pre_pcom_file_copy); 
     if ((pre_pcom = popen(cmd,"r")) == NULL){ 
      //Do nothing 
     }else{ 
      cout << "Parsing pre.pcomments file --->" << pre_pcom_file << endl; 
      pcomyyin = pre_pcom; 
      if(_vecTime.size() > 0){ 
       //for pre_pcom _vecTime should be empty 
       pcom_time = _vecTime[_vecTime.size()-1]; 
      } 
      first_time = 1; // make sure tester cycle start from 0 from pcomment file 
      pcomyyparse(); 
      pclose(pre_pcom); 
      //delete [] cmd; 
      cout << "Parsing pre.pcomments file DONE!" << endl; 
     } 

Я хочу, чтобы проверить файл, который имеет такое же имя с должны иметь файл для примера hello.abc, но файл я хочу, чтобы проверить, может быть hello.abc или hello.gz или даже не существует. Если я делаю так, как описано выше, я получил ошибку, когда файл hello.txt или hello.gz полностью не существует. Как я могу это решить?

+2

Это C++. Почему он помечен 'C'? –

+0

@JonathonReinhart Потому что я использую C++ и c, поэтому я помечен как both.or я должен поставить только C++? –

+1

Это [разные языки] (http://programmers.stackexchange.com/questions/38942/how-is-c-different-from-c). Если вы используете 'cout << ...', тогда вы пишете C++, а не C. –

ответ

2

Просто позвоните fstat() на различные возможные имена и проверьте полученную ошибку, если таковая имеется.

+0

Можете ли вы показать мне пример с кодом? Если я хочу протестировать abc.gz, существует? –

+3

['man stat'] (http://linux.die.net/man/2/stat) –

0

Если вы находитесь в системе POSIX (например, Linux, BSD или OSX), вы можете использовать stat, чтобы узнать, существует ли файл. В Windows используйте PathFileExists.

Или используйте библиотеку Boost filesystem, например ее функцию exists.

+2

В окнах также есть [' _stat'] (http://msdn.microsoft.com/en-us/library /14h5k7ff.aspx). –

Смежные вопросы