1

Господа пишу на С программу да бы ее структуру ни кто не видел после компиляции , она должна находить файл в каталоге , но как задать сравнение с чем искать ? уже и массив искал ни чего не получается , подскажите пожалуйста   
     if ((ent->d_name) == klon)
printf (" есть такой файл \n");

2

l_cho пишет:

Господа пишу на С программу да бы ее структуру ни кто не видел после компиляции , она должна находить файл в каталоге , но как задать сравнение с чем искать ?

нераспарсил... чего?

95% процентов проблем находятся между клавиатурой и стулом.

3

ФИФЕКТЫ РЕЧИ у меня  ab

  if ((ent->d_name) == klon)    если ((перебор всех файлов и каталогов) == название файла )
тогда  файле есть

Как задать с равнение "название файла" , я так понимаю он может сравнивать только с членом структуры ?

4

ОМГ. man 3 strcmp
а потом толстый букварь по Си.

95% процентов проблем находятся между клавиатурой и стулом.

5

Букварь не читал , а вот strcmp помогло
Накодил  если это можно так назвать

#include <stdio.h>
#include <dirent.h>
#include <string.h>

int main (int argc, char *argv []) {
        struct dirent *dp;
        DIR *dirp;
        const char *name;
        name = argv [1];
        dirp = opendir("/var/");
        while (dirp) {
                        if ((dp = readdir(dirp)) != NULL) { 
                        if (strcmp(dp->d_name, name)== 0) { 
                                closedir(dirp); 
                                printf ("DIR\n");
                                return 0;
                               }
                         }else {
                                closedir(dirp); 
                                printf ("NO_DIR\n");
                                return 1;
               }
             }
        return printf ("OPEN_ERROR\n");
}

6

l_cho пишет:

Накодил  если это можно так назвать

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

95% процентов проблем находятся между клавиатурой и стулом.

7

Работает ! Что ту может не работать ? Я начал сразу С++ и Синтаксис только его знаком , так что могу предполагать и про С.
Прежде чем утверждать хотя бы проверил .

8

l_cho пишет:

Работает ! Что ту может не работать ?

нуда.... меня кривое форматирование сбило...

95% процентов проблем находятся между клавиатурой и стулом.

9

1 Зачем "while (dirp) {" ?
2. Фигово тестировали.  Если в каталоге будет много разных файлов, и нужный будет не первым. То ваш код его и не найдет.

Таки стоило почитать букварь. Причем самый, что ни наесть, первый.
Книга "Язык программирования Си" Кернигана и Ритчи.
глава 8.6. "Пример получения списка файлов в каталоге

#include <stdio.h>
#include <dirent.h>
#include <string.h>
 
//~ #define NAME_MAX 256
 
int main(int argc, char **argv)
{
    DIR *dfd;
    struct dirent *dp;
    char filename[NAME_MAX];
 
    if ( argc < 2 )
        strcpy(filename, ".");
    else
        strcpy(filename, argv[1]);
 
    printf("%s\n\n", filename);
    dfd=opendir(filename);
 
    while( (dp=readdir(dfd)) != NULL )
            printf("%s\n", dp->d_name);
 
    closedir(dfd);
    return 0;
}
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

10

Тоже "веселая" конструкция:

return printf ("OPEN_ERROR\n"); 

Понятно, что в таком мелком "проекике" не существенно.... Но потенциал для создания себе лишних граблей есть.

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

11

voral пишет:

2. Фигово тестировали.  Если в каталоге будет много разных файлов, и нужный будет не первым. То ваш код его и не найдет.

в том то и дело, что найдёт.... отформатирую код правильно и увидишь... меня эта спагетти-конструкция тоже с толку сбила  ab

95% процентов проблем находятся между клавиатурой и стулом.

12

Согласен такое возвращать нельзя

voral пишет:

return printf ("OPEN_ERROR\n");

Вы что-то имеете против while , я конечно знаю что прогеры против while , но вроде не плохо работает по такому условию

Зачем "while (dirp) {" ?

13 (11.10.2012 14:58:00 отредактировано l_cho)

Читать внимательнее надо , а не выводы делать , основанные на невнимательности и собственной гордости . Я вообще не программист. А подобное смог бы прочесть.

14

l_cho пишет:

Вы что-то имеете против while , я конечно знаю что прогеры против while , но вроде не плохо работает по такому условию

Да ни чего я против не имею. Но использование его в данном, конкретном алгоритме считаю нецелесообразным. Как минимум сбивает с толку и заставляет вникать дольше в совершенно тривиальный алгоритм.

l_cho пишет:

Читать внимательнее надо

Писать грамотнее надо.

l_cho пишет:

Я вообще не программист. А подобное смог бы прочесть.

Главное, чтоб вы звездной болезнью не захворали от этого....

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

15

PS И ни чего, что на каждой итерации цикла компьютер будет производить одно лишнее сравнение....

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

16

Если научусь писать как Бьерн Страуструп , тогда может заболею. А так извините меня я учится пытаюсь , с толку сбивать не надо. И так как человек по среди океана не знаю куда плыть.

17

l_cho пишет:

А так извините меня я учится пытаюсь , с толку сбивать не надо. И так как человек по среди океана не знаю куда плыть

Если бы вы хотели учиться то попытались понять, что не так в вашем коде, что его не сразу понимают.
Хороший код не тот который безглючно выполняет заданное, но и который логичен и понятен.

Сами подумайте. Условие входа из цикла нам полезно только один раз - если opendir ни чего не открыло нам. Т.е. если этот каталог существует, на протяжении работы этой программы результат этого условия всегда true. Т.е эта проверка совершенно бесполезна. Так сказать вечный цикл.

Так почему же не завязать условия цикла на возможность прочитать следующий файл в открытом каталоге?

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian