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

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

Восстановить пароль Регистрация
 
webber
 Аватар для webber
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 101
07.12.2012, 15:38     Считать файл в оперативную память построчно #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 минут
ап...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 15:38     Считать файл в оперативную память построчно
Посмотрите здесь:

Открываются 2 текстовых файла, сложить построчно числа из 1 и 2 файла, сумму вывести в третий файл построчно C++
Пошагово считать exe файл в память C++
C++ Отображение файла в оперативную память
C++ Построчно считать массив из файла
C++ Считать из файла числовые переменные построчно
C++ Возможно ли написать программу, минующую в работе оперативную память?
Как считать файл построчно записывая в другой файл? C++
Считать файл построчно и вывести в перевёрнутом виде C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
webber
 Аватар для webber
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 101
09.12.2012, 02:12  [ТС]     Считать файл в оперативную память построчно #2
ап...
Yandex
Объявления
09.12.2012, 02:12     Считать файл в оперативную память построчно
Ответ Создать тему
Опции темы

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