Форум программистов, компьютерный форум, киберфорум
Наши страницы

Проблема с opendir - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ANSI и UNICODE http://www.cyberforum.ru/cpp-beginners/thread340080.html
#include <iostream> #include <windows.h> using namespace std; int main(){ TCHAR j; return 0;
C++ Вывод int Добрый день, подскажите, пожалуйста, есть ли возможность вывода числа типа int в формате n знаков ДО запятой, т.е если , например, при n = 2 число 40 так и выводится 40, а число 4 будет выводится -... http://www.cyberforum.ru/cpp-beginners/thread340071.html
Парсинг C++
Привет всем вообщем нужно удачно спарсить данные (gold, money, fuel, lvl, model) вид ответа хоть и xml но данные к сожалению находятся не в <> </> сам ответ от сервера <init...
C++ Матрица
Добрый вечер, вопрос в следующем, есть матрица, в которую можно записать три числа. Как сделать, чтобы при введение этих трех чисел создавался файл, в котором благополучно лежали эти числа. Файл не...
C++ Возможно ли это на с++? http://www.cyberforum.ru/cpp-beginners/thread339905.html
Допустим есть класс class MyBool{ int data; //Читаем бит номер num bool GetVal(num){return data&(1<<num);} //Записываем в бит номер num значение val void...
C++ Крестики-нолики #include <iostream> #include <cstring> using namespace std; void show_cells(); void make_move(int num); void result(); char cells = {'-', '-', '-', '-', '-', '-', '-', '-', '-'}; char... подробнее

Показать сообщение отдельно
Nikopol
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
18.03.2013, 17:46
Тема старая, но напишу, сам на нее наткнулся через гугл, когда искал информацию для решения своей лаб. работы (сделать программу в Linux на C - аналог find), так как данная информация мне помогла, решил дополнить тем что сам улучшил, может поможет кому, задания одинаковые у многих. Вообщем чтобы исправить небольшую недоработку в коде, относительно файлов без разрешения можно использовать иную проверку, вместо:
C++ (Qt)
1
2
3
4
5
6
if(strchr(dir->d_name, '.')==NULL)
      {
         cout<<"Find new directory: "<<dir->d_name<<endl;
        if (!checkDirectory(dir->d_name))
            chdir("..");
      }
можно проверить является ли текущий файл регулярным:
C
1
2
3
4
5
6
7
8
9
10
if (strcmp(d->d_name,".")==0 || strcmp(d->d_name,"..")==0) continue;
        stat(d->d_name, &s);
        if (S_ISREG(s.st_mode)) puts(d->d_name);
        else{
            printf("Найдет новый каталог: %s\n", d->d_name);
            if(!showdir(d->d_name)){
                printf("Возврат в предыдущую директорию...\n"); 
                chdir("..");
            }
        }
Полный код моей программы получился такой:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <sys/types.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
int showdir(char *c){
    DIR *f;
    struct dirent *d;
    int r;
    f = opendir(c); 
    struct stat s; //структура для работы с атрибутами файлов
    r = chdir(c);
    while (d = readdir(f)){
        if (strcmp(d->d_name,".")==0 || strcmp(d->d_name,"..")==0) continue;
        stat(d->d_name, &s); //получить доступ к атрибутам файла через ссылку -> к полю d_name структуры d
        if (S_ISREG(s.st_mode)) puts(d->d_name); // запрос S_ISREG - является ли регулярным файл посредством данных о нем в поле st_mode
        else{
            printf("Найдет новый каталог: %s\n", d->d_name);
            if(!showdir(d->d_name)){
                printf("Возврат в предыдущую директорию...\n"); 
                chdir("..");
            }
        }
    }
    closedir(f);
    return r;
}
main(){
    char c[]=(".");
    showdir(c);
 
}
Здесь конечно нет проверок на различного рода ошибки, и это плохой тон программирования, но мне это было не нужно, учитывая специфику моего задания.

Не по теме:

З.Ы. первое сообщение на форуме = )

0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.