Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Количество строк для текстовых файлов


Автор: Nope 28.8.2008, 00:03
есть список файлов и директорий, находящихся в некоторой заданной директории директории. задача: для всех текстовых файлов в заданной директории вывести количество строк. как определить количество строк - понятно, wc в помощь. вопрос: как в программе узнать тип файла текстовой он или какой-либо другой, в том числе нужно отбрасывать и директории? под текстовым фалом можно подразумевать любой файл, для которого результат работы команды file вернет строку, содержащую "text".

Автор: andrew_121 28.8.2008, 00:11
Nope, Запускай для каждого файла file, парсь результат. И, в зависимости от результата принимай решение - да, нет.
Кол-во строк = кол-во символов "\n". Или в цикле вызываешь fgets() пока не коней файла, при этом инкрементируешь счетчик.

Автор: MAKCim 28.8.2008, 08:51
Цитата(Nope @  28.8.2008,  00:03 Найти цитируемый пост)
как в программе узнать тип файла текстовой он или какой-либо другой, в том числе нужно отбрасывать и директории?

файл или директория? поможет stat (man 2 stat)
текстовый файл? прочитай первые 32 байта, если все символы читаемые (+ \n, \r), значит текстовый

Автор: Nope 28.8.2008, 10:41
Цитата(andrew_121 @ 28.8.2008,  00:11)
Nope, Запускай для каждого файла file, парсь результат. И, в зависимости от результата принимай решение - да, нет.
Кол-во строк = кол-во символов "\n". Или в цикле вызываешь fgets() пока не коней файла, при этом инкрементируешь счетчик.

Подскажите пожалуйста как получить результат работы file в переменную, если не трудно с небольшим куском кода в качестве примера smile 

Автор: MAKCim 28.8.2008, 11:04
Цитата(Nope @  28.8.2008,  10:41 Найти цитируемый пост)
Подскажите пожалуйста как получить результат работы file в переменную, если не трудно с небольшим куском кода в качестве примера

Код

char cmd[128];
char res[256];
size_t index = 0, size = 256;
sprintf(cmd, "file %s", PATH);
FILE * pfs = popen(cmd, "r");
if (pfs == NULL) { /* error */ }
while (!feof(pfs) && !ferror(pfs)) {
    if (index == size)
        break;
    index += fread(res + index, sizeof(char), size - index, pfs);
}
if (ferror(pfs)) { /* error */ }
pclose(pfs);

Автор: Nope 28.8.2008, 11:23
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)