Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция stat (из sys/stat.h) возвращает ошибку 
:(
    Опции темы
Чoо
Дата 17.8.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



Здравствуйте. Вот ни как не пойму, почему данная функция иногда выполняется успешно иногда нет. Чаще нет... 
вроде всё проверил, даже права доступа на чтение каталога/файлов.. 
вобщем есть файлы:
Код

amd@AMD-MS-7250 ~/programming/cpp/0/untitled2-build-desktop $ ls -l
итого 12372
-rw-r--r-- 1 amd amd    21308 2011-08-16 23:15 main.o
-rw-r--r-- 1 amd amd 12610403 2010-10-23 20:50 main.rar
-rw-r--r-- 1 amd amd     6811 2011-08-16 23:15 Makefile
-rwxr-xr-x 1 amd amd    24202 2011-08-16 23:15 untitled2


при попытке получить атрибуты у файлов main.rar & untitled2 функция возвращает ошибку (код ошибки 2 - No such file or directory). С остальными вызов происходит успешно. В домашней папке - вообще ни одного успешного вызова.. Даже не знаю что думать. ВЫзов функции тривиален, поэтому не знаю, есть ли смысл приводить весь код?
вобщем метод получает список файлов, оформляет это дело в динамический списко, каждый элемент которого хранит имя файла и его размер в байтах. Мне этот список нужен в другом классе, который будет обрабатывать файлы из этого списка..
Код

void catalogue::get_filelist(){
    DIR *dir;
    el_filelist *new_el, *last_el;
    struct dirent *entry;
    struct stat attrib;

    //список с файлами очищать не надо, так как для каждой новой директории
    //объект создается заново. Во время уничтожения - список так же уничтожается
    filescount = 0;
    last_el = 0;
    /* открыть указанный каталог, если возможно. */
    dir = opendir(dirname);
    if(dir == NULL)
    {
        printf("Error opening %s: %s", dirname, strerror(errno));
        return;
    }    
    while((entry = readdir(dir)) != NULL)
    {
        if(((strcmp(entry->d_name,".")!=0) && (strcmp(entry->d_name,"..")!=0)) &&
           ((strcmp(extension,"*")==0) || (find_substring(entry->d_name,extension)))) //.. & . - не являются папками или файлами, так же обрабатываем фильтр по расширению
        {
            if(stat(entry->d_name,&attrib) == 0) //!!!!!!!!!!!!!!!!!СОБСТВЕННО В ЭТОМ МЕСТЕ МНЕ НЕ ПОНЯТЕН РЕЗУЛЬТАТ ВЫЗОВА ФУНКЦИИ!!!!!!!!!
            {
                if(S_ISREG(attrib.st_mode))
                {
                    if(attrib.st_size){
                        new_el = new el_filelist(entry->d_name,attrib.st_size);
                        if(filelist)
                        {
                            last_el->next = new_el;
                            last_el = last_el->next;
                        }
                        else{
                            filelist = new_el;
                            last_el = filelist;
                            curr_file = filelist;
                        }
                        ++filescount;
                    }
                    else{
                        printf("File %s = 0 bytes",entry->d_name);
                    }

                }
            }
        }
    }
    closedir(dir);
}


Это сообщение отредактировал(а) Чoо - 17.8.2011, 14:07


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
boostcoder
Дата 17.8.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



ну дык проверь же что в errno при возникновении ошибки.
PM WWW   Вверх
Чoо
Дата 17.8.2011, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



код ошибки 2 - No such file or directory

Добавлено @ 14:04
директория есть. файлы точно есть..  я их список получаю - всё соответствует.. второй день думаю что тут не так.. 


имя файла в entry->d_name - так же прверял. Соответствует тому, что есть на диске.. 

Это сообщение отредактировал(а) Чoо - 17.8.2011, 14:09


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
boostcoder
Дата 17.8.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



может файлы с кирилицей в именах?

Добавлено через 1 минуту и 14 секунд
или файлы находятся на какой-то не обычной ФС. не?
PM WWW   Вверх
Чoо
Дата 17.8.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



boostcoder, имена файлов не кириллические.. Даже переименовывал, что бы наверняка.. Тоже думал, что что-то с юникодом связано.. но нет.. Файловая система ext4


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Чoо
Дата 17.8.2011, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



временно поменял условие в 20й строке на:
Код

        if(((strcmp(entry->d_name,".")!=0) && (strcmp(entry->d_name,"..")!=0)) &&
           ((strcmp(extension,"*")==0) || (find_substring(entry->d_name,extension)))
            && (entry->d_type==DT_REG))

что бы вообще обойтись без вызова stat.. 
причину ошибки так и не понял :(.. (errno если что сбрасывал перед каждым вызовом stat)


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.