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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы со scandir, работает некоректно 
:(
    Опции темы
Smasher
Дата 5.7.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.3.2009
Где: Odessa, Ukraine

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



Здравсвуйте. Мне вот надо написать обход каталога на с++ в Linux. Для этого использую функцию scandir но она как то сортирует по неизвестному критарию, даже когда ставлю параметр alphasort. Вот привожу код:

Код

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <iostream>
using namespace std;
#define _STRLEN_ 1024
main()
{
 struct dirent **namelist;
   int n;
    char bufStr[_STRLEN_];
    struct stat bufInfo;
   char *path="/windowsD";
   n = scandir(path, &namelist,0, alphasort);
   if (n < 0)
       perror("scandir");
   else {
       while(n--) 
       {
           strcpy (bufStr, path);              // Копируем в него текущую директорию
      strcat (bufStr, "/");                     // Я думаю тоже no comment
      strcat (bufStr, namelist[n]->d_name);         // Добавляем имя текущего файла
      stat (bufStr, &bufInfo);
      if(S_ISDIR (bufInfo.st_mode))
          cout<<namelist[n]->d_name<<endl;
           //printf("%s\n", namelist[n]->d_name);
           //free(namelist[n]);
       }
       //free(namelist);
   }
}



Если ставлю свою функцию на мето параметра функции сортировки, т.е. вместо alphasort свою функцию, то ругается на это.  Так же при текущих подключенных библиотеках не находит функцию free хотя она лежит в #include <dirent.h>, а она подключена.

Заранее благодарен. Особенно жду ответа на вопрос как огрганизовать правильную сортировку!
PM MAIL WWW ICQ   Вверх
nickless
Дата 5.7.2009, 16:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

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



Оно сортирует правильно, просто ты выводишь в обратном порядке. Когда примеры из мана копипастишь, смотреть надо что они делают ;) 

Цитата(Smasher @  5.7.2009,  15:00 Найти цитируемый пост)
не находит функцию free хотя она лежит в #include <dirent.h>

free из <cstdlib>

ЗЫ
Код у тебя - уже как-бы не C, но еще не совсем C++ smile 



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

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Smasher
Дата 5.7.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.3.2009
Где: Odessa, Ukraine

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



вот я првиел как сортирует.
Мои документы
winclient
progs
myac
System Volume Information
RECYCLER
Patch
Linux
..
.
$RECYCLE.BIN
Press [Enter] to close the terminal ...

видно же что не по парядку, даже не в обратном порядке, ведь progs и  Patch даже близко рядом не находятся.. а я понял оно сортирует отдельно ещё по регистарм, но как от этого избавится?

Это сообщение отредактировал(а) Smasher - 5.7.2009, 17:44
PM MAIL WWW ICQ   Вверх
andrew_121
Дата 5.7.2009, 18:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(Smasher @  5.7.2009,  16:53 Найти цитируемый пост)
ведь progs и  Patch даже близко рядом не находятся

Про регистр забыл.

Добавлено через 2 минуты и 13 секунд
Цитата(Smasher @  5.7.2009,  16:53 Найти цитируемый пост)
я понял оно сортирует отдельно ещё по регистарм, но как от этого избавится?

В качестве указателя на функцию сортировки, передай свою.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Smasher
Дата 5.7.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.3.2009
Где: Odessa, Ukraine

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



да я нашёл их можно сравнить командой ‘stricmp’, но подключив все нужные библиотеки(#include <stdio.h> #include <string.h>) мне выдало:
ошибка: нет декларации ‘stricmp’ в этой области видимости
в какой она находится библиотеке?

Это сообщение отредактировал(а) Smasher - 5.7.2009, 22:05
PM MAIL WWW ICQ   Вверх
Smasher
Дата 5.7.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.3.2009
Где: Odessa, Ukraine

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



помогите плиззз
PM MAIL WWW ICQ   Вверх
andrew_121
Дата 6.7.2009, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Читай маны внимательней.
http://www.opennet.ru/cgi-bin/opennet/man....&category=3
Вместо stricmp() нужно использовать strncasecmp()


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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