Форум программистов, компьютерный форум CyberForum.ru

Как прочитать последние 10Кб в txt файле? - C++

Восстановить пароль Регистрация
 
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
09.08.2010, 09:04     Как прочитать последние 10Кб в txt файле? #1
Есть txt файл размером до 100 мб
Нужно открыть и прочитать из него последнме 10Кб текста и занести в массив
Как такое можно сделать ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2010, 09:04     Как прочитать последние 10Кб в txt файле?
Посмотрите здесь:

C++ В файле input.txt содержатся сведения о группе студентов. переписать данные файла в файл output.txt, отсортировав их по возрастанию
Посчитать сколько в файле input.txt символов и записать их кол-во в output.txt C++
Как прочитать несколько байтов в файле с n-го байта по m-й байт ? C++
C++ Прочитать txt и записать в другой txt файл
Из файла .txt записать в этот массив символы, так же как они записаны в файле C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
09.08.2010, 09:09     Как прочитать последние 10Кб в txt файле? #2
fseek(); \\C
ifstream::seekg()\\C++
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
09.08.2010, 09:12  [ТС]     Как прочитать последние 10Кб в txt файле? #3
спасибо за ответ!
А где тут обозначено что читаеться именно 10Кб ?
мне только для с++ интересно
Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
09.08.2010, 09:17     Как прочитать последние 10Кб в txt файле? #4
nill, http://www.cplusplus.com/reference/i...istream/seekg/
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
09.08.2010, 09:19  [ТС]     Как прочитать последние 10Кб в txt файле? #5
Demihalf,
про 10кб там ничего нет
мне важно не просто просичать файл а прочитать только последние 10кб
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
09.08.2010, 09:19     Как прочитать последние 10Кб в txt файле? #6
Допустим
C++
1
2
3
4
ifstream file_in;
file_in.open(...);
file_in.seekg(10240, ios::end);
\\ далее читаем файл
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
09.08.2010, 09:20     Как прочитать последние 10Кб в txt файле? #7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
 
int main()
{
    FILE* fp;
    int position;
    char str[10241];
    
    fp=fopen("input.txt", "r");
    
    if (fp==NULL)
    {
        printf ("Couldn't open file\n");
        return 0;
    }
    
    fseek(fp, 0, SEEK_END);
    position=ftell(fp)-10240;
    
    if (position<0)
    {
        printf ("File is too small\n");
        fclose(fp);
        return 0;
    }
    
    fseek(fp, position, SEEK_SET);
    fread(str, 1, 10240, fp);
    
    str[10240]='\0';
    
    puts(str);
    
    fclose(fp);
    
    return 0;
}
Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
09.08.2010, 09:28     Как прочитать последние 10Кб в txt файле? #8
Цитата Сообщение от nill Посмотреть сообщение
про 10кб там ничего нет
А вам нужно, чтобы в C++ была функция, которая бы специально для вас читала последние 10 кб файла?..
Вот kazak вам написал, как пользоваться. А могли бы и сами почитать, что написано по ссылке.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
09.08.2010, 18:16     Как прочитать последние 10Кб в txt файле? #9
ftell() вроде как long выдает

Есть еще другой момент - если просто перейти на конец_файла - 10Kb,
то очень высокая вероятность попасть в середину строку.
Если это так и нужно тогда ничего не делаем.
А если нужно с начала строки, то следует например промотать до начала следующей строки.

Добавлено через 45 секунд
Евгений М., а еще программа будет неправильно работать если размер файлы меньше 10Kb


Добавлено через 49 секунд
Ну еще неплохо проверять что вызовы функций успешно сработали - fseek(), fread() и прочие
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
09.08.2010, 18:48     Как прочитать последние 10Кб в txt файле? #10
Цитата Сообщение от odip Посмотреть сообщение
Евгений М., а еще программа будет неправильно работать если размер файлы меньше 10Kb
Почему?

Цитата Сообщение от odip Посмотреть сообщение
Ну еще неплохо проверять что вызовы функций успешно сработали - fseek(), fread() и прочие
Ну... ТС сам исправит если нужно.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
09.08.2010, 19:25     Как прочитать последние 10Кб в txt файле? #11
А нет - скажет "File is too small"
Возможно требуется вывести весь файл если размер небольшой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2010, 20:41     Как прочитать последние 10Кб в txt файле?
Еще ссылки по теме:

Как выполнять команды, записанные в другом файле (к примеру в txt)? C++
Как найти нужную строку в txt файле? C++
C++ Как прочитать сразу два txt файла, в каждом из них находится массив строк?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.08.2010, 20:41     Как прочитать последние 10Кб в txt файле? #12
Цитата Сообщение от Евгений М. Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main()
{
...
    fseek(fp, 0, SEEK_END);
    position=ftell(fp)-10240;
    
    if (position<0)
    {
        printf ("File is too small\n");
        fclose(fp);
        return 0;
    }
...
}
можно было бы написать
C
1
2
3
...
if ( fseek(fp, -10240, SEEK_END) )
  /* файл короче, чем нужно. выругаться и закрыться */
Но на самом деле есть другой подводный камень - символ \n который в замечательной ОС Виндовс в два символа \r\n переводится. Это я к тому, что файл нужно, как двоичный открывать.
Yandex
Объявления
09.08.2010, 20:41     Как прочитать последние 10Кб в txt файле?
Ответ Создать тему
Опции темы

Текущее время: 23:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru