Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 19:44   #1
Stases
Пользователь
 
Регистрация: 08.01.2009
Сообщений: 16
По умолчанию Работа с файлами СИ

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

Код:
#include <string.h>
#include <stdio.h>
#include <dirent.h>

int sel (struct dirent *d)
{
    int b=strlen(d->d_name);
    if ((d->d_name[b-1]=='argv[2]')&&(d->d_name[b-2]=='.'))
    return 1;
    else return 0;
}

int main(int argc, char ** argv)
{
    int i, n;
    struct dirent ** entry;
    
    n=scandir(argv[1], &entry, sel(argv[2]), alphasort);
    printf("Kolichestvo naidenih failov=%i\n", n);
    if(n<0)
    {
	printf("Oshibka chtenia direktorii\n");
	return 1;
    }
    for(i=0;i<n;i++)
    printf("%s inode=%i\n", entry[i]->d_name, entry[i]->d_ino);
    return 0;
}
программа выводит имена и количество всех файлов
не могу найти ошибку

2.
Написать программу, которая выводит дату и время последнего изменения файла. Имя файла задавать в виде аргумента командной строки.

с этой программой вообще тупик :-(
если кто знает помогите пожалуйста.
Stases вне форума Ответить с цитированием
Старый 25.12.2009, 02:16   #2
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

вот твоя 1 программа, там посмотри, там 1 функция лишняя, убери ее и подведи под свое дело, там легко.
Код:
bool funcDIR(TCHAR *buffer, BOOL flag)
{
	int files = 0;
	int folders = 0;
	int szFiles = 0;
	TCHAR temp[MAX_PATH];
	HANDLE hFile;
	WIN32_FIND_DATA fd;
	ULARGE_INTEGER i;

	SetCurrentDirectory(buffer);

	if ((hFile=FindFirstFile(TEXT("*.*"), &fd))==INVALID_HANDLE_VALUE)//если там что то не то с маркером...
	{
		printf("Invalid file handle (%d)\n", GetLastError());
		return false;
	}//иначе...
	do
	{
		if(!strcmp(fd.cFileName, TEXT("."))||!strcmp(fd.cFileName, TEXT("..")))	
		{
			pfuncDIR(buffer);
			printf("<DIR>\t\t%s\n",fd.cFileName);
			folders++;
			continue;
		}
		if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && flag)//дирректория...
		{
			strcpy(temp,buffer);
			strcat(temp,"\\");
			strcat(temp,fd.cFileName);
			pfuncDIR(temp);
			SetCurrentDirectory(buffer);
			printf("<DIR>\t\t%s\n",fd.cFileName);
			folders++;
		}
		if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && !flag)
		{
			strcpy(temp,buffer);
			strcat(temp,"\\");
			strcat(temp,fd.cFileName);
			pfuncDIR(temp);//вот эту функцию надо убрать
			folders++;
		}
		if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))//файл..
		{
			if (flag)
			{
				if(GetLastWriteTime(fd,buffer))
				{
					printf("%d\t",fd.nFileSizeLow);
					printf("%s\n",fd.cFileName);
				}
			}
			files++;
		}
	}
	while(FindNextFile(hFile,&fd) != 0);
	GetDiskFreeSpaceEx(NULL,NULL,NULL,&i);
	FindClose(hFile);
	printf("\t\t%d файлов\t%d\n\t\t%d папок\t\t%i\n",files,szfiles(buffer),folders,i);
	return true;
}
Olejik вне форума Ответить с цитированием
Старый 27.12.2009, 16:32   #3
Stases
Пользователь
 
Регистрация: 08.01.2009
Сообщений: 16
По умолчанию

вот сам пытался написать вторую:
Код:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>

time_t timefile(time_t alpha)
{
struct stat t;
fstat(alpha,&t);
printf("Время последенего изменения файла %ld секунд с 1 января 1970 года\n",t.st_mtime);
}

int main (int argc, char *argv[])
{
if(argc=1)
    {
    int fd;
    if((fd=(open(argv[1],O_RDONLY)))==-1)
	{
	perror("error");
	exit(-1);
	}
    timefile(fd);
    }
}
есть проблема
время по умолчанию выводиться начиная с 1 января 1970 года
как изменить это?
Stases вне форума Ответить с цитированием
Старый 27.12.2009, 20:20   #4
Stases
Пользователь
 
Регистрация: 08.01.2009
Сообщений: 16
По умолчанию

вторую написал помогите с первой
Stases вне форума Ответить с цитированием
Старый 28.12.2009, 15:31   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Не могу найти ошибку - вы глаза может откроете и посмотрите, что вам компилятор скажет?!?
Не понимаю, что это за высказывание - не могу найти ошибку. Пройдитесь отладкой - ваша программа не такая большая - ее можно пошагово за 10 минут отладить и найти ошибки.
MaTBeu вне форума Ответить с цитированием
Старый 28.12.2009, 19:43   #6
Stases
Пользователь
 
Регистрация: 08.01.2009
Сообщений: 16
По умолчанию

выводит ошибку, что у sell (18 строка) недостаточно аргументов
пробывал объявлять struct dirent *d и использовать d как аргумент, не помогло
Stases вне форума Ответить с цитированием
Старый 29.12.2009, 02:20   #7
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

ой ))
не то написал, а что с первой? я же Вам кидал пример...
Olejik вне форума Ответить с цитированием
Старый 03.01.2010, 14:28   #8
Stases
Пользователь
 
Регистрация: 08.01.2009
Сообщений: 16
По умолчанию

пример рабочий, но сильно сложный, в нем присутствуют функции которые я ещё не изучал.
мне бы через scandir, или что-то подобное
Stases вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами voron.kz Помощь студентам 4 15.11.2009 17:25
Работа с файлами [MI_nor] Общие вопросы C/C++ 4 08.03.2009 17:50
Работа с файлами Smith777 Помощь студентам 4 23.02.2008 05:08
Работа с файлами Acros Помощь студентам 5 14.02.2007 18:40