Господа пишу на С программу да бы ее структуру ни кто не видел после компиляции , она должна находить файл в каталоге , но как задать сравнение с чем искать ? уже и массив искал ни чего не получается , подскажите пожалуйста
if ((ent->d_name) == klon)
printf (" есть такой файл \n");
Си поиск файла в каталоге
Господа пишу на С программу да бы ее структуру ни кто не видел после компиляции , она должна находить файл в каталоге , но как задать сравнение с чем искать ?
нераспарсил... чего?
ФИФЕКТЫ РЕЧИ у меня :)
if ((ent->d_name) == klon) если ((перебор всех файлов и каталогов) == название файла )
тогда файле есть
Как задать с равнение "название файла" , я так понимаю он может сравнивать только с членом структуры ?
ОМГ. man 3 strcmp
а потом толстый букварь по Си.
Букварь не читал , а вот 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");
}
Накодил если это можно так назвать
не будет работать...
а без прочтения букваря на одном языке с вами сложно говорить....
Работает ! Что ту может не работать ? Я начал сразу С++ и Синтаксис только его знаком , так что могу предполагать и про С.
Прежде чем утверждать хотя бы проверил .
Работает ! Что ту может не работать ?
нуда.... меня кривое форматирование сбило...
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;
}
Тоже "веселая" конструкция:
return printf ("OPEN_ERROR\n"); Понятно, что в таком мелком "проекике" не существенно.... Но потенциал для создания себе лишних граблей есть.
2. Фигово тестировали. Если в каталоге будет много разных файлов, и нужный будет не первым. То ваш код его и не найдет.
в том то и дело, что найдёт.... отформатирую код правильно и увидишь... меня эта спагетти-конструкция тоже с толку сбила :)
Согласен такое возвращать нельзя
return printf ("OPEN_ERROR\n");
Вы что-то имеете против while , я конечно знаю что прогеры против while , но вроде не плохо работает по такому условию
Зачем "while (dirp) {" ?
Читать внимательнее надо , а не выводы делать , основанные на невнимательности и собственной гордости . Я вообще не программист. А подобное смог бы прочесть.
Вы что-то имеете против while , я конечно знаю что прогеры против while , но вроде не плохо работает по такому условию
Да ни чего я против не имею. Но использование его в данном, конкретном алгоритме считаю нецелесообразным. Как минимум сбивает с толку и заставляет вникать дольше в совершенно тривиальный алгоритм.
Читать внимательнее надо
Писать грамотнее надо.
Я вообще не программист. А подобное смог бы прочесть.
Главное, чтоб вы звездной болезнью не захворали от этого....
PS И ни чего, что на каждой итерации цикла компьютер будет производить одно лишнее сравнение....
Если научусь писать как Бьерн Страуструп , тогда может заболею. А так извините меня я учится пытаюсь , с толку сбивать не надо. И так как человек по среди океана не знаю куда плыть.
А так извините меня я учится пытаюсь , с толку сбивать не надо. И так как человек по среди океана не знаю куда плыть
Если бы вы хотели учиться то попытались понять, что не так в вашем коде, что его не сразу понимают.
Хороший код не тот который безглючно выполняет заданное, но и который логичен и понятен.
Сами подумайте. Условие входа из цикла нам полезно только один раз - если opendir ни чего не открыло нам. Т.е. если этот каталог существует, на протяжении работы этой программы результат этого условия всегда true. Т.е эта проверка совершенно бесполезна. Так сказать вечный цикл.
Так почему же не завязать условия цикла на возможность прочитать следующий файл в открытом каталоге?