This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
courses:programming:extra_tasks [2017/04/07 09:10] pro100kot |
courses:programming:extra_tasks [2017/05/04 08:18] pro100kot |
||
---|---|---|---|
Line 107: | Line 107: | ||
* Вывод элементов дерева с отображением структуры. Например: <code>((5)10(15))20((25)30(35))</code> | * Вывод элементов дерева с отображением структуры. Например: <code>((5)10(15))20((25)30(35))</code> | ||
* Удаление всех элементов дерева | * Удаление всех элементов дерева | ||
- | * ? | + | * Удаление заданного элемента - рекомендую подумать и попробовать реализовать самостоятельно |
Для удобства, рекомендуется использовать отдельную функцию для создания узла: | Для удобства, рекомендуется использовать отдельную функцию для создания узла: | ||
Line 120: | Line 120: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | ** Пример на обзор txt файлов во вложенных папках:** | ||
+ | <code c dir-list.c> | ||
+ | #include <stdio.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | #include <sys/types.h> | ||
+ | #include <dirent.h> | ||
+ | |||
+ | void printFile(const char *path, const int lvl); | ||
+ | |||
+ | void dirTraveler(const char *startDir, const int lvl); | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | dirTraveler(".",0); | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | void dirTraveler(const char *startDir, const int lvl) | ||
+ | { | ||
+ | char path[1000]; | ||
+ | strcpy(path, startDir); | ||
+ | |||
+ | DIR *dir=opendir(path); | ||
+ | if(dir) | ||
+ | { | ||
+ | struct dirent *de = readdir(dir); | ||
+ | while(de) | ||
+ | { | ||
+ | if(de->d_type == DT_REG && strstr(de->d_name,".txt")) | ||
+ | { | ||
+ | int path_len = strlen(path); | ||
+ | strcat(path, "/"); | ||
+ | strcat(path, de->d_name); | ||
+ | printFile(path, lvl); | ||
+ | path[path_len] = '\0'; | ||
+ | } | ||
+ | if(de->d_type == DT_DIR && 0!=strcmp(".", de->d_name) && 0!=strcmp("..", de->d_name)) | ||
+ | { | ||
+ | int path_len = strlen(path); | ||
+ | strcat(path, "/"); | ||
+ | strcat(path, de->d_name); | ||
+ | dirTraveler(path, lvl+1); | ||
+ | path[path_len] = '\0'; | ||
+ | } | ||
+ | de = readdir(dir); | ||
+ | } | ||
+ | } | ||
+ | closedir(dir); | ||
+ | } | ||
+ | |||
+ | void printFile(const char *path, const int lvl) | ||
+ | { | ||
+ | int i; | ||
+ | char s[100]; | ||
+ | for(i=0;i<lvl;i++) | ||
+ | printf("\t"); | ||
+ | printf("%s[\n", path); | ||
+ | |||
+ | FILE *f = fopen(path, "r"); | ||
+ | if(f) | ||
+ | { | ||
+ | while(fgets(s,sizeof(s)/sizeof(char),f)) | ||
+ | { | ||
+ | for(i=0;i<lvl+1;i++) | ||
+ | printf("\t"); | ||
+ | printf("%s",s); | ||
+ | } | ||
+ | fclose(f); | ||
+ | } | ||
+ | |||
+ | for(i=0;i<lvl;i++) | ||
+ | printf("\t"); | ||
+ | printf("]\n"); | ||
+ | } | ||
+ | </code> | ||
+ | |||