Russian Qt Forum
Января 18, 2025, 02:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с задачкой  (Прочитано 2859 раз)
eu8cc
Гость
« : Июня 07, 2010, 14:39 »

Задачка:написать программу, находящую в заданном каталоге и всех его подкаталагах все файлы заданного размера. Имя каталога задается пользователем в качестве третьего аргумента командной строки. Диапазон (мин мах) размеров файлов задается пользователем в качестве первого и второго аргумента командной строки. Программа выводит результат поиска в файл(четвертый аргумент командной строки) в виде полный путь, имя файла, его размер. На консоль выводиться сообщения числа просмотренных файлов.

Проверьте пожалуйста код?


Код:
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <ftw.h>
#include <sys/stat.h>
#include <time.h>
#include <stdint.h>

int minsize;
int maxsize;
FILE *out = NULL;
int i=0;
void find(char const *dirname,int minsize,int maxsize,FILE *out);
{
DIR *dr=opendir (const char *dirname);
if (dr==NULL)
{
fprintf(stderr,"Невозможно открыть директорию \"%s\"",dirname);
fclose(out);
errno = ENOENT;
perror(", ");
return -1; exit(1);
}

struct dirent *dt;
while((dt=readdir(dr)))
{
if(dt->d_type=DT_DIR) {find();}
if(dt->d_type=DT_REG)
{
if(((dt->st_size)>minsize) $$ ((dt->st_size)<maxsize)))
{
fprintf(out,"%-40s %-10jd %s\n",filename, (intmax_t) dt->st_size);
i=i+1;
}
}
}
return 0;
}
int main (int argc,char* argv[])
{

if (argc != 5)
{
fprintf(stderr,"Не все параметры заданы\n");
errno = EINVAL; //invalid arguments
perror(argv[0]);
printf("формат: нач_размер кон_размер папка имя_файла\n");
return -1;
}
out = fopen (argv[4],"w+");
if ( out == NULL)
{
printf("NULL\n");
fprintf(stderr,"Ошибка создания файла \"%s\"",argv[4]);
perror(", ");
return -1;
}
DIR *dr = opendir(argv[3]);
if (dr == NULL)
{
fprintf(stderr,"Невозможно открыть директорию \"%s\"",argv[3]);
fclose(out);
errno = ENOENT;// no such file or directory
perror(", ");
return -1;
}
minsize = atol(argv[1]);
maxsize = atol(argv[2]);
dirname = argv[3]
find(*dirname,minsize, maxsize, FILE *out);
printf ("Число просмотренных файлов равно %d\n", i);
closedir(dr);
fclose(out);
return 0;
}
Записан
niXman
Гость
« Ответ #1 : Июня 07, 2010, 15:02 »

еще не на всех форумах запостил? могу подсказать еще несколько.
http://www.cyberforum.ru/cpp-linux/thread142108.html
Записан
eu8cc
Гость
« Ответ #2 : Июня 07, 2010, 15:19 »

Я с удовольствием уже отдохнул, очень срочно нужна помощь, не везде но помогают
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.103 секунд. Запросов: 21.