когда я строю строку
string s ="";
s = rb.rep + a.chemin.substr(rep.size());
//cout << "s:" << s << endl;
if (s.empty()){
cerr<<"c++ string is uninitialized"<<endl;
exit(1);
}
и делает
if(is_file(s)){
a.s="ok";
}
else{
SEULS.push_back(ela.first);
a.s="SEUL";
}
с этой функцией:
bool is_file(string &path) {
структура определена
struct stat buf;
stat(path.c_str(), &buf);
вы знаете, если это файл или нет
if(S_ISREG(buf.st_mode)) cout<<"is_file "<<path<<" "<<S_ISREG(buf.st_mode)<<endl;
else cout<<"NO is_file "<<path<<" "<<S_ISREG(buf.st_mode)<<endl
другой способ пытается открыть файл
FILE*f=fopen(path.c_str(), "r");
if( f == NULL){
cerr<<"PROB fopen "<<path<<endl;
exit (EXIT_FAILURE);
}
else{
fclose(f);
}
результат возвращается
return S_ISREG(buf.st_mode);
}
Я получил этот результат на консоли
is_file e / rep_A / 1.txt 1
НЕТ is_file e / 2.txt 0
PROB fopen e / 2.txt
Программа завершилась с кодом выхода: 1
но когда я комментирую
// FILE*f=fopen(path.c_str(), "r");
// if( f == NULL){
// cerr<<"PROB fopen "<<path<<endl;
// exit (EXIT_FAILURE);
// }
// else{
// fclose(f);
// }
Я получил
is_file e / 2.txt 1
is_file e / rep_B / 3.txt 1
LesSeuls de e et de a ...
is_file a / rep_A / 1.txt 1
is_file a / rep_B / 3.txt 1
ПРОБЛЕМА:
e / 2.txt не существует !!
и если я раскомментирую
cout << "s:" << s << endl;
перед звонком
if(is_file(s)){
a.s="ok";
}
else{
Это нормально!
Я получаю
НЕТ is_file e / 2.txt 0
PROB fopen e / 2.txt
Программа завершилась с кодом выхода: 1
В результате я должен напечатать строку s или напечатать что-нибудь, чтобы получить хорошую строку s. это как параллельное программирование.
Это не шутка
Вы с этим встречались?
Спасибо