Решил я создать одну хитрую программку. В виндовозе и на паскале всё проходило на ура с помощью всяческих record'ов типа "папка" и функций aka findFirst(), FindClose() и т.д. Но тут-то совсем другая тема!
Так что - скажите пожалуйста, как например, в массив, ну скажем, строк, записать все имена файлов и папок в заданной директории?
Это должно выглядеть примерно так:
....................
int count;
count = ?Число_Элементов(<папка>)?;
string *subdir = new string[count];
subdir=?Фуншон_для_вывода_элементов(...)?;
....................
Либо через цикл. И вопрос в том, как получить это самое число элементов и запихнуть их в массив
Работа с файловой системой (ext3, C++)
Модератор: Модераторы разделов
-
Илуватар
- Сообщения: 295
- Статус: Antic1tizen 0ne
- ОС: Debian Wheezy/Sid amd64
Работа с файловой системой
† Obiit animus, natus est atomus †
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Работа с файловой системой
ну а просто смонтировать эту фс куда-нибудь, и просто обходить рекурсивно?
слава роботам!
-
aLexx programmer
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
Re: Работа с файловой системой
(D3K@nT0R1S @ Aug 14 2006, в 06:09) писал(а):Так что - скажите пожалуйста, как например, в массив, ну скажем, строк, записать все имена файлов и папок в заданной директории?
Может, просто использовать ls?
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Работа с файловой системой
Надо полагать, что и сишные функции подойдут - readdir, scandir.
-
Илуватар
- Сообщения: 295
- Статус: Antic1tizen 0ne
- ОС: Debian Wheezy/Sid amd64
Re: Работа с файловой системой
ну а просто смонтировать эту фс куда-нибудь, и просто обходить рекурсивно?
Я и хочу так сделать. Рекурсивы рулят! :P
З.Ы. Обожди-ка, в принципе отдельно про монтирование и обход понятно, а вместе ниасилил...можно поподробнее?
Может, просто использовать ls?
А может, ещё не на Си, а в шеллах писать?
Надо полагать, что и сишные функции подойдут - readdir, scandir.
Ща попробую, спасибо. Будь ты на ЕГ, накинул бы тебе егопку
† Obiit animus, natus est atomus †
-
Илуватар
- Сообщения: 295
- Статус: Antic1tizen 0ne
- ОС: Debian Wheezy/Sid amd64
Re: Работа с файловой системой
Ччёрт!! Пишет то же самое, типа "segmentation fault", то есть пытается рассмотреть ext3 как блочный девайс. Млин. Ладно, попробую по see also чего-нить доискаться...
ADD
Кажется, доискался...
Хорошая вещь OpenSource! Как только сделаю нормальный релиз, вышлю исходники. А что это за прога - пока тайна. Не хочу пускать слова на ветер.
ADD
Кажется, доискался...
Код: Выделить всё
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int
main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}Хорошая вещь OpenSource! Как только сделаю нормальный релиз, вышлю исходники. А что это за прога - пока тайна. Не хочу пускать слова на ветер.
† Obiit animus, natus est atomus †
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Работа с файловой системой
Гм... причем тут блочный девайс... 
-
Илуватар
- Сообщения: 295
- Статус: Antic1tizen 0ne
- ОС: Debian Wheezy/Sid amd64
Re: Работа с файловой системой
Всё равно...
при получении атрибутов файла (фуншон stat) говорит Segmentation Fault. Вопрос - как определить, файл попался или папка?
† Obiit animus, natus est atomus †
-
GRS
- Сообщения: 236
- Статус: C++ Pro
- ОС: Suse10.2/XP
Re: Работа с файловой системой
D3K@nT0R1S
Вопрос - как определить, файл попался или папка?
Код: Выделить всё
char * filename = <имя файла>;
struct stat finfo;
lstat(filename, &finfo);
if (S_ISREG(s.st_mode))
cout<<"It's common file."<<endl;
if (S_ISDIR(s.st_mode))
cout<<"It's folder."<<endl;-
Red User
- Сообщения: 229
- ОС: Debian
Re: Работа с файловой системой
D3K@nT0R1S
Вообще-то readdir возвращает структуру, в которой есть поле d_type.
Вообще-то readdir возвращает структуру, в которой есть поле d_type.
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
-
Илуватар
- Сообщения: 295
- Статус: Antic1tizen 0ne
- ОС: Debian Wheezy/Sid amd64
Re: Работа с файловой системой
2 GRS лстат пробовал уже, он ведь собсно и выдаёт данные о файле..., да, сама процедура проходит, а вот макросы напрочь отказываются работать...
2 Red User ща гляну, спс.
2 Red User ща гляну, спс.
† Obiit animus, natus est atomus †
-
GRS
- Сообщения: 236
- Статус: C++ Pro
- ОС: Suse10.2/XP
Re: Работа с файловой системой
D3K@nT0R1S
Значит как-то криво делаешь. Проверь параметры, путь к файлу и возвращаемое функцией lstat значение.
Значит как-то криво делаешь. Проверь параметры, путь к файлу и возвращаемое функцией lstat значение.
-
Илуватар
- Сообщения: 295
- Статус: Antic1tizen 0ne
- ОС: Debian Wheezy/Sid amd64
Re: Работа с файловой системой
Значит как-то криво делаешь. Проверь параметры, путь к файлу и возвращаемое функцией lstat значение.
Похоже, уже не надо...руки дошли проверить четвёртый пост в этой теме...
Ммм...вот:
Код: Выделить всё
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
static int dir(const struct dirent * eps)
{
if(eps->d_type == 4 )
return 1;
return 0;
}
int main (int argc,char *argv[])
{
struct dirent ** eps;
int n;
int i;
n = scandir("./",&eps,dir,alphasort);
if(n > 0){
for(i = 0;i < n;i++){
printf("\n name >> %s",eps[i]->d_name);
}
}
else{
printf("not dir");
}
return 0;
}З.Ы. (с) не мой
З.З.Ы. Кажись, допёр, наконец...d_type=4 - это папка?
† Obiit animus, natus est atomus †