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

Быстрое чтение и запись файлов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Уравнение с тремя переменными С++ http://www.cyberforum.ru/cpp-beginners/thread362850.html
Уважаемые форумчане, помогите решить задачу на С++. Задано уравнение третьей степени 11*x*x*x-13*y*y*y+17*z*z*z-4503=0 Определить, имеет ли оно решение в целых числах. Если имеет, то сколько их и чему они равны. кроме того обязательным условием является использование в коде подпрограммы. Сам я написал вот такой "сложный" код с двумя вложенными циклами без всяких подпрограмм, в результате...
C++ Две не сложные задачки 1. Составьте программу, определяющую остаток от деления числа А на число В. 2. Даны два различных вещественных числа. Определить какое из них меньше. ЗАРАНЕЕ СПАСИБО http://www.cyberforum.ru/cpp-beginners/thread362814.html
C++ Считавание и выполнение математического выражения из файла
Всем привет! Нужно сделать программу, которая бы считывала математическое выражение из файла input.txt, и записывала результат в output.txt Вот что я сделал: #include <iostream.h> #include <stdio.h> int main()
работа с файлами C++
подскажите как можно сохранить/считать с файла *.dat и чтобы этот файл не смогли прочесть(даже открыть) другие пользователи.
C++ Вычислить значение выражения http://www.cyberforum.ru/cpp-beginners/thread362782.html
2. Вычислите значения выражений при int x = 7, y = 10: a) x & y; b) x | y; c) x ^ y; d) ~x;
C++ Помогите со структурами (дописать программу) Структуры вводятся с клавиатуры. В ряде вариантов заданий с клавиатуры вводится не вся структура, а только ее отдельные поля. Необходимо выполнить обработку сформированного массива структур и результаты обработки вывести на экран дисплея. Массив должен содержать сведения о книгах. Каждая структура должна иметь следующие поля: автор (авторы), название, год издания, цена и издательство. Вывести... подробнее

Показать сообщение отдельно
xAtom
913 / 738 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
08.10.2011, 07:51     Быстрое чтение и запись файлов
Цитата Сообщение от Coyote112358 Посмотреть сообщение
максимально быстро его прочитать
В текстовом режиме время будет во основном тратиться в преобразование текста в числа, в двоичном всё будет быстрее, ну вот накидал код при помощи файла отображаемого на память, самое главная проблема ещё раз повторюсь это преобразование.
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
#include <stdio.h>
#include <windows.h>
 
int main(){
  int col = 0,  
      row= 0, 
      len = 0, 
      pos = 0, 
   **mat = NULL;
   char   slen[8];
   char*  buf;
   DWORD  size;
   HANDLE fmap;
   HANDLE fp = CreateFile("D:\\matrix.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0u, NULL);
   if(fp == INVALID_HANDLE_VALUE)
       exit(1);
   if((size = GetFileSize(fp, NULL)) == 0xFFFFFFFF)
          GetFileSize(fp, &size);
   if(size == 0u) {
         CloseHandle(fp);
         exit(2);
  }
   // проецировать будем только для чтения
   fmap = CreateFileMapping(fp, NULL, PAGE_READONLY, 0u, 0u, NULL);
   if(! fmap) {
        CloseHandle(fp);
        exit(3);
   }
   // отобразим файл на начальный адрес указателя для считывания
   buf = (char*) MapViewOfFile(fmap, FILE_MAP_READ, 0u, 0u, 0u);
   if(! buf) {
        CloseHandle(fmap);
        CloseHandle(fp);
        exit(3);
  }
   // здесь критическое место 
   len = col = row = pos = 0;
   if(sscanf(buf, "%s[^\n]%n", slen, &pos) == 1) {
         len = atoi(slen);
         mat = new int*[len];
         for(int i = 0; i < len; i++)
              mat[i] = new int[len];
         buf += strlen(slen);
         while(sscanf(buf, "%d%n", &mat[row][col], &pos) == 1) {
               if(++col >= len) {
                    row++;
                    col = 0;
                }
                buf += pos;
          }
  }
  UnmapViewOfFile((LPCVOID)fmap);
  CloseHandle(fmap);
  CloseHandle(fp);
 
   /* тест
   for(int r = 0; r < len; r++) {
         for(int c = 0; c < len; c++)
               printf("%d ", mat[r][c]);
         putchar('\n');
   }
   */
 
   // после работы с матрицой освободить память
   for(int i = 0; i < len; i++)
        delete[] mat[i];
   delete[] mat;
   mat = NULL;
   getchar();
   return 0;
}
Coyote112358, какие размеры файла ограничивают использовать только кучу, открываем файл узнаём размер его, выделяем память под буфер далее читаем блоком ну можно указать ещё файловый буфер по больше функциями setbuf/setvbuf до максимума ограничения далее преобразуем в числа.
 
Текущее время: 16:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru