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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
webber
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 101
#1

Считать файл в оперативную память построчно - C++

07.12.2012, 15:38. Просмотров 601. Ответов 1
Метки нет (Все метки)

Условие задачи звучит так: Дан текстовой файл размером не менее 100 Кбайт, содержащий строки различной длины. Считать этот файл в оперативную память построчно. Операцию повторить 20 раз. Характеристика: максимальный размер строк (диапазон изменения 64-128 байт).

Написал код:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <windows.h>
 
using namespace std;
 
#define FileSize 100*1024      
#define M 20                       
#define _rand(min, max) ( rand() % ((max) - (min) + 1) + (min) )
 
int main(){
    
    __int64 c1, c2, fr; 
    byte  *MemoryArea;
    int i, j, k;
    HANDLE File;                
    DWORD c;
    float t,v;
    char chars[93];                  
    const wchar_t *FileName = TEXT("file.txt");
 
    setlocale(LC_ALL, "Russian");
 
//Открываем файл и заполняем его случайными символами на 100Кб  
 
    File = CreateFile(  FileName, 
                        GENERIC_READ|GENERIC_WRITE, 
                        0, 
                        NULL, 
                        CREATE_ALWAYS, 
                        FILE_ATTRIBUTE_NORMAL, 
                        0);  
 
    if (File == INVALID_HANDLE_VALUE || File == NULL){  
            cout << "Ошибка: " << GetLastError() << endl;
            cin.get();
            return 0;
    }
    for(int i=33, n=1; i<=126; ++i, ++n){
        chars[n] = (char)i; 
    }
    MemoryArea=(byte *)GlobalAlloc(GPTR, FileSize);
 
    for (i=0; i<FileSize; i++){ 
        CopyMemory(MemoryArea+i, &chars[_rand(0, 93)], 1);                                          
    }
    WriteFile(File,MemoryArea,FileSize,&c,0);
    
    if(WriteFile==0){
      cout<< "Ошибка" << GetLastError()<< endl;
      cin.get();
      return 0;
    }
    GlobalFree(MemoryArea); 
 
//Копируем получившийся файл в ОП блоками разной длины
 
    for (i=64; i<=128; i*=2){
        t=0.0;
        MemoryArea=(byte *)GlobalAlloc(GPTR,i); 
 
            for (j=0; j<M; j++){
                SetFilePointer(File,0,NULL,FILE_BEGIN);    
                    
                    for (k=0; k<FileSize/i; k++){
                        QueryPerformanceCounter((LARGE_INTEGER *)&c1);
                        
                        ReadFile(File,MemoryArea,i,&c,0);  
 
                        QueryPerformanceCounter((LARGE_INTEGER *)&c2);
                        QueryPerformanceFrequency((LARGE_INTEGER *)&fr);
 
                        t=t+(c2-c1)/(float)fr; //Итоговое время                       
                    }
            }
        t=t/M; //Среднее время
        v=FileSize/(1024*1024*t);//Скорость MB/s
 
        cout << i << "    | " << v << endl;
        GlobalFree(MemoryArea);                             
    }
 
CloseHandle(File);
cin.get();
return 0;
}
Все работает, но сомневаюсь насчет правильности понимания мной условия,
а именно 'содержащий строки различной длины' и 'Считать этот файл в оперативную память построчно'.
Правильно ли я реализовал условие?

Добавлено через 14 часов 56 минут
ап...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 15:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считать файл в оперативную память построчно (C++):

Загрузить файл в оперативную память - C++
есть файл, который будет прочтен много раз как я могу его загрузить в оперативную память, а не читать каждый раз из HDD ?

Как считать файл построчно записывая в другой файл? - C++
1) Данная программа считывает только первую строку следующие строки она не трогает. Хотел решить данную проблему через while, но не знаю...

Считать файл построчно и вывести в перевёрнутом виде - C++
создать файл, считать построчно и каждую строку вывести в перевёрнутом виде.

Пошагово считать exe файл в память - C++
Приветствую. Имеется ехе файл, который нужно вручную отобразить в память (как это делает загрузчик windows). Начинаем с: HANDLE hFile =...

Считывание из файла построчно и запись в файл построчно getline () - C++
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;fstream&gt; # include &lt;string&gt; using namespace std; int main () { ...

Отображение файла в оперативную память - C++
Реализовать отображение файла в оперативную память. Выполнить задание, с использованием этого отображения. Задание: Создать массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
webber
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 101
09.12.2012, 02:12  [ТС] #2
ап...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 02:12
Привет! Вот еще темы с ответами:

Открываются 2 текстовых файла, сложить построчно числа из 1 и 2 файла, сумму вывести в третий файл построчно - C++
Товарищи, помогите с кодом пожалуйста.=( 1. Создать текстовый файл и сохранить в нём текст из 10..100 слов. Слова в тексте разделены...

Запись текста из текстового файла в оперативную память - C++
Подскажите, пожалуйста как решить следующую задачу. Имеется текстовый файл, состоящий из неизвестной длины строк и строки у него...

Построчно считать массив из файла - C++
имеется файл 1 2 3 4 5 6 3 4 6 8 3 1 2 5 7 9 0 5 и надо что бы каждая строка записалась в отдельный массив, типо так a=1 2 3 4 5...

Возможно ли написать программу, минующую в работе оперативную память? - C++
Скорее всего вопрос немного не к теме раздела, но всё же. Почему необходимо загружать программы перед началом выполнения в оперативную...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru