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

Максимально эфективное бинарное чтение из файла под Windows - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Заполнение матрицы по правилу http://www.cyberforum.ru/cpp-beginners/thread731192.html
Привет, делаю лабораторную, нужно заполнить матрицу по заданному правилу: 19 20 21 22 23 24 18 17 16 15 14 13 7 8 9 10 11 12 6 5 4 3 2 1 Размер матрицы ввожу сама, вот мой код: #include <iostream>
C++ Переписать в другой файл все положительные элементы первого файла, стоящие на четных местах Люди добрые, помогите пожалуйста: необходимо создать файл, состоящий из целых чисел. Переписать в другой файл все положительные элементы первого файла, стоящие на четных местах. Оба файла вывести в консоль. Собственно, вопрос знатокам: как произвести запись массива в файл и его дальнейшее считывание? Заранее спасибо за помощь :D http://www.cyberforum.ru/cpp-beginners/thread731189.html
Метод Касательных C++
Задание: Решение нелинейных алгебраических уравнений методом касательных. Помогите найти ошибку в коде программы : #include <math.h> #include <conio.h> #include <stdio.h> float fx(float); float fx1(float); void main() { clrscr();
строки (напечатать все слова,которые совпадают с начальным отрезком латинского алфавита C++
строки (напечатать все слова,которые совпадают с начальным отрезком латинского алфавита) Ребята,нужна помощь!!) Дана строка,которая состоит из слов, разделенных пробелами. Нужно напечатать все слова,которые совпадают с начальным отрезком латинского алфавита (a, ab, abc,abcd … и т. д)
C++ запись строки в файл http://www.cyberforum.ru/cpp-beginners/thread731157.html
Помогите, пожалуйста, программа должна записывать строку в файл, но только с помощью gets() и puts() #include <iostream> #include <cstdio> using namespace std; int main() { FILE * ptrFile = fopen("text.txt", "w"); if (ptrFile != NULL) {
C++ Быстродействие процессора? Ребят заинтересовал вопрос по архитектуре процессора. Что мешает повысить быстродействие процессора за счет увеличения количества конвейеров? подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
17.12.2012, 01:13  [ТС]     Максимально эфективное бинарное чтение из файла под Windows
WhiteP, не получается у меня использовать этот твой винапи вариант - почему-то WriteFile нифига не пишет и чесно признаётся что записывает каждый раз 0 байт. Какого хрена оно так ?
Вот код где я его использую, вот почему он каждый раз нифигашеньки не запсывает WriteFile этот
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
#define BUFSIZE 65536 //должен быть кратен размеру сектора (обычно 512, точнее - GetDiskFreeSpace)
 
void CryptoSaveFastHelper(Cryptographer* crypto,CryptoMode mode, uint64_t* keys, char* from, char* to)
{
    //буфер должен быть выровнен по границе сектора. VirtualAlloc выравнивает начало буфера
    //автоматически по адресу кратному 64.
    uint64_t * pBuf = (uint64_t*)VirtualAlloc(NULL, BUFSIZE, MEM_COMMIT, PAGE_READWRITE);
 
    if(!pBuf)
    {
        std::cout<<"VirtualAlloc error. Code: "<<GetLastError()<<std::endl;
        throw -1;
    }
 
    int* key; //ключ (и)
 
    //uint64_t bufferRead[512];//мой буффер на 4 кб
    uint64_t lastBlock = 0ULL;//последний блок который нужно будет дописать в конец файла
 
    HANDLE inputData = CreateFile(from, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_NO_BUFFERING|FILE_FLAG_SEQUENTIAL_SCAN, 0);
    HANDLE outputData = CreateFile(to, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL|FILE_FLAG_NO_BUFFERING, 0);
 
    DWORD readed = 0;//сколько байт считано
    DWORD writed = 0;//сколько байт записано
    BOOL isOk = 0;
 
    switch(mode)
    {
    case _DESEBC:
        {
            while(isOk = ReadFile(inputData, pBuf, BUFSIZE, &readed, 0))
            {
                //шифруем считанные блоки
                crypto->EnCrypt(pBuf,readed/8);
 
                _ASSERT(WriteFile(outputData,pBuf,readed-(readed%8),&writed,0)==0);//отрабатывает без ошибок, но нифига не пишеет!
                if(readed < BUFSIZE)
                    break;
            }
 
            //если число байтиков в файле делилось на 4 без остатка
            if(!(readed % 8))
            {
                lastBlock = crypto->EnCrypt(lastBlock);
                WriteFile(outputData,&lastBlock,(DWORD)8,&writed,0);
            }
            else//иначе добиваем нолями предпоследний а в последний пишем размер
            {
                lastBlock = readed%8;
                lastBlock = crypto->EnCrypt(lastBlock);
                char* ptr = (char*)(pBuf+(readed/8));
                ptr += (readed%8);
                for(int i=0;i<8-(readed%8); i++)
                    *ptr++=0;
 
                pBuf[(readed/8)] = crypto->EnCrypt(pBuf[(readed/8)]);
 
                WriteFile(outputData,&pBuf[readed/8],(DWORD)8,&writed,0);
                WriteFile(outputData,&lastBlock,(DWORD)8,&writed,0);
            }
        }
        break;
    }
    CloseHandle(inputData);
    CloseHandle(outputData);
}
 
Текущее время: 10:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru