Подсчет неизвестных номеров символов из файла в C - PullRequest
2 голосов
/ 15 апреля 2010

Я ищу простой способ подсчета неизвестного количества символов в файле с использованием языка Си. спасибо за вашу помощь

Ответы [ 5 ]

8 голосов
/ 15 апреля 2010

Способ POSIX (вероятно, что вы хотите):

off_t get_file_length( FILE *file ) {
    fpos_t position; // fpos_t may be a struct and store multibyte info
    off_t length; // off_t is integral type, perhaps long long

    fgetpos( file, &position ); // save previous position in file

    fseeko( file, 0, SEEK_END ); // seek to end
    length = ftello( file ); // determine offset of end

    fsetpos( file, &position ); // restore position

    return length;
}

Стандартный способ C (педантичный):

long get_file_length( FILE *file ) {
    fpos_t position; // fpos_t may be a struct and store multibyte info
    long length; // break support for large files on 32-bit systems

    fgetpos( file, &position ); // save previous position in file

    if ( fseek( file, 0, SEEK_END ) // seek to end
        || ( length = ftell( file ) ) == -1 ) { // determine offset of end
        perror( "Finding file length" ); // handle overflow
    }

    fsetpos( file, &position ); // restore position

    return length;
}

Если вы хотите узнать количество многобайтовых символов, вам нужно прочитать весь файл, например, fgetwc.

5 голосов
/ 15 апреля 2010
FILE *source = fopen("File.txt", "r");
fseek(source, 0, SEEK_END);
int byteCount = ftell(source);
fclose(source);
2 голосов
/ 15 апреля 2010

РЕДАКТИРОВАТЬ: Вы, вероятно, хотите прочитать ответы ниже.

Вы можете продолжать чтение символов до конца файла, сравнив результат операции чтения с EOF (конец файла). Выполнение их по одному также позволяет собирать другие статистические данные о них.

char nextChar = getc(yourFilePointer);
int numCharacters = 0;

while (nextChar != EOF) {
    //Do something else, like collect statistics
    numCharacters++;
    nextChar = getc(yourFilePointer);
}
2 голосов
/ 15 апреля 2010
/* wc is used to store the result */
long wc;

/* Open your file */
FILE * fd = fopen("myfile", "r");

/* Jump to its end */
fseek(fd, 0, SEEK_END);

/* Retrieve current position in the file, expressed in bytes from the start */
wc = ftell(fd);

/* close your file */
fclose(fd);
1 голос
/ 15 апреля 2010

Это должно помочь вам начать работу, если вам нужно считать только некоторые символы (например, только печатные символы)

while (fgetc(file_handler)!=EOF)
{
 //test condition here if neccesary.
  count++;
}

Если вы ищете размер файла, решение fseek / ftell кажется менее дорогим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...